The Wine development release 1.7.23 is now available.

What's new in this release (see below for details):
  - Better support for files drag & drop.
  - Improvements to the HTTP cookie management.
  - Initial support for 64-bit Android builds.
  - Fixes to crypto certificates management.
  - Various bug fixes.

The source is available from the following locations:

  http://prdownloads.sourceforge.net/wine/wine-1.7.23.tar.bz2
  http://mirrors.ibiblio.org/wine/source/1.7/wine-1.7.23.tar.bz2

Binary packages for various distributions will be available from:

  http://www.winehq.org/download

You will find documentation on http://www.winehq.org/documentation

You can also get the current source directly from the git
repository. Check http://www.winehq.org/git for details.

Wine is available thanks to the work of many people. See the file
AUTHORS in the distribution for the complete list.

----------------------------------------------------------------

Bugs fixed in 1.7.23 (total 42):

  16465  "Trial" button doesn't show in main menu of Nick's "Diego's Wolf Pup Rescue"
  16940  Adobe InDesign CS4 (version 6) crashes on launch
  18065  Certain keyboard buttons not working in Operation Flashpoint and Fallout (2 and 3)
  19432  Icy Tower 1.4 crashes when moving its window
  21712  Stem Cell engine Oil Platform Demo hangs without displaying anything
  21877  Dark Age of Camelot patcher crashes from page fault
  23374  Strange Cases: The Lighthouse Mysteries crashes
  28557  Notepad++ does not receive drag+drop files in KDE, seems to work in GNOME
  29449  USPS shipping assistant version 3.8 won't start (Microsoft SQL Server Compact database metadata incorrectly decrypted, enh. RSA AES-128 provider)
  29908  Win7 File Open dialog fails to fill in the OPENFILENAME structure
  30927  Alien Shooter crashes when dying, no backtrace
  30973  Unsupported symbol id warnings when backtracing with Visual C 2010 .pdb files
  32189  SigmaPlot 11.0 fails to start
  32313  .Net 2.0 Installation Fail
  32499  hwcheck.exe from PPTV crashes
  33109  Desura fails to update
  33267  Wine not run applications and scram the incons do Xfce.
  33742  UPlay 3.x/4.x needs native crypt32
  34563  Regression: rFactor 2 ModMgr.exe buttons not working properly
  35326  Reason 7.0.1 needs 'd2d1.dll'
  35441  VBScript CInt can't convert strings to integers
  35472  E-Transcript Bundle Viewer 6.x installer uses VBScript MsgBox function with optional arguments
  35473  Microsoft Word Viewer 2003 crashes on unimplemented function t2embed.dll.TTDeleteEmbeddedFont when opening Word 201x documents
  35742  Drakensang: The Dark Eye demo crashes with unimplemented function d3dx9_36.dll.D3DXCreateTorus
  35776  Crysis is extremely slow in Wine 1.7.14
  35966  postgresql 9.3.4-3 fails to install (cscript/vbscript)
  36004  wininet/http tests crash with WINEDEBUG=warn+heap
  36128  valgrind shows a leak in programs/wineconsole/registry.c
  36314  valgrind shows a leak in psapi/tests/psapi_main.c
  36512  client_rzrq.exe from AnXin crash when using the new style interface.
  36545  REAPER 4.x crashes on exit
  36601  valgrind shows a definite leak in wininet/tests/internet.c
  36723  SolidEdge ST6 crashes on startup, needs bcrypt.dll.BCryptCloseAlgorithmProvider
  36731  Runes of Magic 'ClientUpdater.exe' crashes after a number of update cycles (mshtml environment setup contains stack buffer overflow)
  36741  Windows Live Writer 14.0.x fails to detect blog settings (HTMLMetaElement_get_charset is a stub)
  36765  AES 128 works different on "Win7" and on "Wine win7"
  36787  Gex 3D renders very slowly since Wine 1.7.14
  36802  warn:winmm:get_mmioFromProfile can't find SystemSound
  36823  Rift (Steam) launcher/patcher needs kernel32.GetGeoInfoA 'GEO_ISO2' support (ISO 2-letter country/region code)
  36860  Molot VST stop working in Wine 1.7.20
  36886  ST visual develop 4.3.0: crash when new workplace and project name is entered and OK is pressed
  36890  DAEMON Tools Ultra 1.x/2.x virtual driver installer 'dtinst.exe' crashes on unimplemented function setupapi.dll.SetupDiSetClassInstallParamsW

----------------------------------------------------------------

Changes since 1.7.22:

Akihiro Sagawa (9):
      ole32/tests: Add CoGetPSClsid WOW64 registry tests.
      ole32: Add KEY_WOW64 support in wrapper registry functions.
      ole32: Search 32-bit registry in 64-bit CoGetPSClsid and vice versa.
      oleaut32/tests: Add registry view flag to myRegDeleteTreeW like RegDeleteKeyEx.
      oleaut32/tests: Add more test cases that proxy stub interface is on one side.
      oleaut32: Use the alternate interface key if not present on current view.
      msi: Move set_installed_prop() call because platform information is needed in it.
      msi/tests: Add non-existence value tests for mixed package.
      msi/tests: Add CLSID registry tests for mixed package.

Alexandre Julliard (15):
      cmd: Use array indexing syntax to access array members.
      ntdll: Use a custom signal restorer for Android.
      riched20/tests: Fix test on 64-bit.
      configure: Improve the check for the resolver library.
      configure: Add a check for sys/ucontext.h and include it where appropriate.
      ntdll: Directly use ucontext_t instead of SIGCONTEXT on all platforms.
      ntdll: Use the standard mcontext_t type for the signal context on Android.
      libwine: Update LD_LIBRARY_PATH in the current process from the JNI environment.
      libwine: No longer look for libraries in the dll path on Android.
      vnbt.vxd: Include winsock2.h before other headers.
      secur32/tests: Include winsock2.h before other headers.
      winhttp/tests: Include winsock2.h before other headers.
      loader: Avoid ELF32_ST_INFO macro that is missing on Android.
      ntdll: Define arch_prctl since it is missing on Android.
      scrrun/tests: Allow the drive total size to fit into an int.

Andrei Slăvoiu (3):
      wined3d: Remove usage of gl_info parameter from select_card_nvidia_binary.
      wined3d: Remove usage of gl_info parameter from select_card_amd_binary.
      wined3d: Remove the gl_info parameter from select_card callbacks.

Austin English (2):
      dbghelp: Ignore a few more symbol ids.
      setupapi: Add a stub for SetupDiSetClassInstallParamsW.

Bruno Jesus (15):
      rsaenh/tests: Make the tests pass in Windows <= NT4.
      rsaenh/tests: Add DES/3DES-112 const buffer test.
      rsaenh/tests: Add a pre XP DES compatibility test.
      dinput/tests: Release the instance after tests (valgrind).
      psapi/tests: Free buffer on error (valgrind).
      wineconsole: Free registry key name (valgrind).
      rsaenh/tests: Simplify broken NT4 tests.
      rsaenh/tests: Fix some Windows 8 tests.
      crypt32/tests: Add more tests related to certificates.
      crypt32: Fix conversion of multiple fields in CertStrToName.
      crypt32: CertGetIssuerCertificateFromStore must return error for self-signed certificates.
      rsaenh/tests: Add many tests related to key derivation.
      rsaenh: Change the default AES chaining mode to CBC.
      rsaenh: Change the way AES 128 is derived to match Windows behavior.
      rsaenh: CALG_AES cannot be used if the key length was not specified.

Damjan Jovanovic (4):
      winex11.drv: Fix a GlobalLock() reference leak.
      winex11.drv: Don't memcpy() over the DROPFILES point just after setting it.
      winex11.drv: Translate the WM_DROPFILES point into client coordinates whenever possible.
      winex11.drv: Allow the clipboard to copy files to other X11 apps.

Daniel Lehman (1):
      cryptnet: Continue checking the revocation urls if one is offline.

David Hedberg (1):
      comdlg32: Populate psia_results before making any callbacks.

François Gouget (1):
      ntdll: Fix the compilation by using the right mcontext_t field names for the signal context on FreeBSD.

Henri Verbeet (25):
      wined3d: Always mark vertex buffers as used in context_apply_draw_state().
      wined3d: Don't try to resolve vertex buffer locations in context_stream_info_from_declaration().
      wined3d: Clarify WINED3DUSAGE_WRITEONLY a bit.
      wined3d: Make vp_ffp_states static.
      wined3d: Make wined3d_arbfp_blit_rb_functions static.
      ddraw/tests: Get rid of struct sVertex.
      ddraw/tests: Get rid of struct sVertexT.
      d3d8/tests: Get rid of struct vertex.
      d3d8/tests: Get rid of struct tvertex.
      d3d8/tests: Get rid of struct nvertex.
      d3d9/tests: Get rid of struct vertex.
      d3d9/tests: Get rid of struct tvertex.
      d3d9/tests: Get rid of struct nvertex.
      d3d9/tests: Get rid of struct vertex_shortcolor.
      d3d9/tests: Get rid of struct vertex_floatcolor.
      wined3d: Fix a couple of renderer strings in select_card_nvidia_binary().
      wined3d: Use the previous "dirty" status to set WINED3D_BUFFER_NOSYNC in wined3d_buffer_map().
      wined3d: Track synchronized buffer maps.
      d2d1: Implement d2d_factory_CreateStrokeStyle().
      d2d1: Implement D2D1MakeRotateMatrix().
      dxgi: Implement dxgi_surface_GetDesc().
      d2d1: Implement d2d_d3d_render_target_GetTransform().
      d2d1: Implement d2d_d3d_render_target_SetTransform().
      dxgi: Only use a single newline in the dxgi_factory_MakeWindowAssociation() FIXME.
      wined3d: Avoid a compiler warning in context_stream_info_from_declaration().

Jacek Caban (18):
      wininet: Use stored server name in HTTP_InsertCookies.
      wininet: Rewrite structs storing cookies to represent domains as a tree.
      mshtml: Added IDispatch support for IHTMLTable[23] interfaces.
      wininet: Added new cookie_set_t type and use it in get_cookie.
      wininet: Include trailing slash in URL cache hashes.
      vbscript: Use VariantChangeType in to_int.
      wscript: Added support for calling object by DISPID_VALUE in do_icall.
      mshtml: Fixed tests on IE11.
      atl: Added AtlAxCreateControlLic(Ex) stubs.
      mshtml: Added IHTMLMetaElement::charset property implementation.
      mshtml: Avoid useless PATH changes and avoid buffer overflow in set_environment.
      wscript: Added IActiveScriptSiteWindow implementation.
      vbscript: Added support for title and type arguments of MsgBox.
      wininet: Fixed leak in InternetGetConnectedStateExA.
      wininet: Moved DllInstall to internet.c.
      urlmon: Don't threat '#' as path delimiter in file URIs.
      wine/debug.h: Added wine_dbgstr_variant and wine_dbgstr_vt implementations.
      wine/debug.h: Added debugstr_variant and debugstr_vt aliases and removed all duplicated implementations.

Jactry Zeng (2):
      riched20: Fix ME_SetSelection when cpMax > strlen().
      riched20: Implement ITextSelection::GetText.

Ken Thomases (1):
      winemac: Don't query the position of the one-past-the-end character with IMR_QUERYCHARPOSITION.

Marcus Meissner (4):
      rpcrt4: Fixed memory leak on error exit (Coverity).
      d3dx9_36: Fixed typo in HeapAlloc return checking (Coverity).
      secur32: Removed superflous NULL check (Coverity).
      dmime: Remove useless NULL check (Coverity).

Nikolay Sivov (5):
      kernel32: Implement GEO_PARENT for GetGeoInfo().
      kernel32: Properly implement EnumSystemGeoID().
      kernel32/tests: Skip working tests properly.
      wshom.ocx: Implement get_Item() for IWshEnvironment.
      t2embed: Added TTDeleteEmbeddedFont() stub.

Piotr Caban (6):
      usp10: Limit trace length in dump_types.
      usp10: Limit trace length in iso_dump_types.
      msi: Don't publish features with non positive install level.
      msi: Fix feature actions overriding in process_state_property.
      msi: Don't check feature install level on features specified in arguments.
      msi: Add more feature state tests.

Sebastian Lackner (1):
      wine.inf: Fix timezone information for Israel Standard Time.

Shuai Meng (3):
      vbscript: Implemented Abs.
      vbscript/tests: Added tests for the subtype of TypeName.
      vbscript: Implemented IsNumeric.

Stefan Dösinger (6):
      ddraw: Add validation to SetPriority / GetPriority.
      ddraw/tests: Add a test for IDirectDrawSurface7::SetPriority.
      wined3d: Remove wined3d_surface_set/get_priority.
      wined3d: Remove wined3d_volume_set/get_priority.
      wined3d: Remove wined3d_buffer_set/get_priority.
      wined3d: Remove wined3d_texture_set/get_priority.

Thomas Faber (16):
      wininet: Do not omit mandatory argument to WriteFile.
      d3dxof: Do not omit mandatory argument to WriteFile.
      d3dx9_36: Do not omit mandatory argument to WriteFile.
      gdi32: Do not omit mandatory argument to WriteFile.
      cmd: Do not omit mandatory argument to WriteFile.
      dxdiag: Do not omit mandatory argument to WriteFile.
      strmbase: Separate BaseFilter destructor from Release.
      strmbase: Destroy base class after child class.
      wbemprox: Do not omit mandatory argument to DeviceIoControl.
      mpr: Do not omit mandatory argument to DeviceIoControl.
      kernel32: Do not omit mandatory argument to DeviceIoControl.
      qcap: Destroy BaseFilter after VfwCapture child class.
      winegstreamer: Destroy BaseFilter after GST child class.
      wineqtdecoder: Destroy BaseFilter after QT child class.
      quartz: Destroy BaseFilter after child class.
      include: Correctly spell STATUS_SMI_PRIMITIVE_INSTALLER_FAILED.

Vincent Povirk (1):
      mscoree: Accept "v4.0" as a runtime version in config files.

Zhenbo Li (5):
      mshtml: Added support for IHTMLTable[23] interfaces in HTMLTable.
      mshtml: Added IHTMLTable::summary property implementation.
      mshtml: Added IHTMLFormElement::reset method implementation.
      mshtml: Fixed get_target_window when no parent frame is found.
      mshtml: Added IHTMLFormElement::target property implementation.

--
Alexandre Julliard
julliard@winehq.org
