The Wine development release 8.10 is now available. What's new in this release: - All PE->Unix transitions go through the syscall interface. - Mouse cursor clipping improvements. - Support for virtual memory placeholders. - Locale and timezone data updates. - Various bug fixes. The source is available at: https://dl.winehq.org/wine/source/8.x/wine-8.10.tar.xz Binary packages for various distributions will be available from: https://www.winehq.org/download You will find documentation on https://www.winehq.org/documentation You can also get the current source directly from the git repository. Check https://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 8.10 (total 13): - #18889 Multiple isolation-aware applications fail to load (MSN Messenger Live 2009, Lync 2010, Adobe Premiere Pro CS3, Quicken 201X)(embedded PE manifest search should support ISOLATIONAWARE_MANIFEST_RESOURCE_ID) - #24946 uTorrent 2.2.0 hangs on startup (FD_WRITE event is reported over and over in WSAEnumNetworkEvents for a bound UDP socket) - #27827 Creo Elements/Direct Modeling Express 4.0/6.0 loader failure due to missing msvcrt.dll dependency (native netapi32.dll imports msvcrt functions) - #47808 Cygwin's mintty.exe crashes with a stack overflow - #52868 TwitchTest crashes on unimplemented function IPHLPAPI.DLL.GetPerTcpConnectionEStats - #53092 Animated Puzzles crashes on start - #54410 .NET 3.5 Checkbox checkmarks should be black instead of "Foreground" color - #54599 Honeygain crashes on unimplemented function IPHLPAPI.DLL.GetCurrentThreadCompartmentId - #54810 PmxEditor 0.2.7.5 doesn't start after Wine 8.4. - #54913 ntdll: NtDuplicateToken has wrong prototype - #54949 user32:msg gets an extra WM_NCPAINT in ShowWindow(child, SW_SHOW) - #54991 Chinese IME no longer works in Naver LINE since Wine 8.9 - #55008 wininet:http - test_secure_connection() fails on Windows and Wine ---------------------------------------------------------------- Changes since 8.9: Akihiro Sagawa (1): winex11: Ignore BadWindow errors caused by XConfigureWindow. Alex Henrie (29): iphlpapi: Add GetCurrentThreadCompartmentId stub and a test. iphlpapi: Add GetPerTcpConnectionEStats stub. bcrypt/tests: Don't allocate inside todo_wine and free outside of it. iphlpapi/tests: Use ~0u instead of ~0ul in testGetIpNetTable. winegstreamer: Pass a QWORD pointer to IMFByteStream_GetLength. wusa: Fix double free on error path in read_update_package (scan-build). mscms: Fix double free on error path in EnumColorProfilesA (scan-build). msi: Return ERROR_OUTOFMEMORY if calloc fails in TransformView_Create (scan-build). msi: Make TransformView_Create static. msi: Fix memory leak in ready_media (scan-build). wbemprox: Fix memory leak on error path in create_view (scan-build). jscript: Fix memory leak on error path in String_replace (scan-build). jscript: Remove unnecessary call to malloc in strbuf_ensure_size. conhost: Fix memory leak on error path in edit_line_move_to_history (scan-build). localspl: Fix memory leak in lpr_start_doc (scan-build). msvcrt: Use 'else if' in _wgetcwd. wineusb: Fix memory leaks on error paths in usb_submit_urb (scan-build). kerberos: Fix memory leaks in (wow64_)query_ticket_cache (scan-build). dnsapi: Fix memory leak on error path in do_query_netbios (scan-build). hhctrl: Fix memory leak on error path in resolve_filename (scan-build). wldap32: Fix memory leak on error path in ldap_start_tls_sW (scan-build). jscript: Fix memory leak on error path in regexp_string_match (scan-build). vbscript: Fix memory leak on error path in RegExp2_Execute (scan-build). wininet: Fix memory leaks on error paths in INTERNET_LoadProxySettings (scan-build). vbscript: Fix memory leak on error path in alloc_vbscode (scan-build). rpcrt4: Replace RPCRT4_strndupA with strdup. winhttp: Fix double free on error path in queue_task (scan-build). msi: Fix memory leak on error path in MSI_ProcessMessage (scan-build). regedit: Fix memory leak on error path in GetItemPath (scan-build). Alexandre Julliard (46): include: Don't align the stack for PE builds. ntdll: Use x18 for the TEB on ARM64. ntdll: Use nameless unions/structs for loader data. ntdll: Use nameless unions/structs for CPU-related data. ntdll: Use nameless unions/structs for IO_STATUS_BLOCK. include: Only enable the non-inline NtCurrentTeb() on the Unix side. wineps: Don't use CDECL for private functions. win32u: Don't use WINAPI for the font enumeration function. win32u: Don't use WINAPI for private functions. ntdll: Don't pass arguments on the stack for user callbacks on ARM64. ntdll: Don't pass arguments on the stack for user callbacks on x86-64. ntdll: Don't pass arguments on the stack for user callbacks on i386. ntdll: Don't pass arguments on the stack for user callbacks on ARM. ntdll: Don't use WINAPI for KeUserModeCallback(). ntdll: Store the PE function pointers as simple void pointers. include: Only declare __wine_unix_call() on the PE side. ntdll: Use the sysv ABI for the %fs allocation function. ntdll: Use the sysv ABI for setjmp/longjmp on the Unix side. ntdll: Use the default ABI for all functions on the Unix side. kernelbase: Update timezone data to version 2023c. nls: Update locale data to CLDR version 43. xslt: Import upstream release 1.1.38. xml2: Import upstream release 2.11.4. kernelbase: Use nameless unions/structs for loader data. kernelbase: Use nameless unions/structs for CPU-related data. kernelbase: Use nameless unions/structs for IO_STATUS_BLOCK. kernel32: Use nameless unions/structs. server: Send the APC call data as vararg in the queue_apc request. server: Send the APC call data as vararg in the select request. wininet/tests: Update expected WineHQ certificate. ntdll: Support adding overlapping ranges in mmap_add_reserved_area(). ntdll: Add a helper function to unmap memory above the user space limit. ntdll: Reimplement unmap_area() to avoid recursion and callbacks. ntdll: Reimplement map_fixed_area() to avoid recursion and callbacks. ntdll: Reimplement allocation inside a reserved area without using a callback. ntdll: Reimplement allocation of the virtual heap without using a callback. ntdll: Reimplement fill_basic_memory_info() without using a callback. ntdll: Reimplement virtual_release_address_space() without using a callback. ntdll: Report the remaining part of the 64K after a view as free. ntdll: Use the full 4Gb for large address aware applications on Wow64. ntdll: Update the reserved range on 64-bit to match the preloader. ntdll: Use the sysv ABI for __wine_syscall_dispatcher_return(). winebuild: Set a 64-bit base address for generated 64-bit dlls. winebuild: Update target-dependent characteristics after option parsing. winedump: Dump version resources in a more structured way. winedump: Dump manifest resources in a more structured way. Alistair Leslie-Hughes (5): xactengine: Correct interfaces for IXACT3Cue. include: Use STDMETHOD when returning HRESULT. krnl386.exe16: Don't overflow when calculating size. xactengine: Correct XACTNOTIFICATIONTYPE_MAX value. xactengine: IXACT3EngineImpl_CreateSoundBank isn't a stub. André Zwing (1): wow64: Ignore Thumb flag when parsing ARM syscall number. Aurimas Fišeras (1): po: Update Lithuanian translation. Bernhard Kölbl (1): mf/tests: Remove duplicate call to MFStartup(). Bernhard Übelacker (1): comdlg32: Avoid crash in RemoveControlItem. Billy Laws (1): configure: Stash host LDFLAGS when configuring cross-compilers. Connor McAdams (4): uiautomationcore: Put general purpose helper functions into separate source file. uiautomationcore: Add global interface table helper functions. uiautomationcore: Respect ProviderOptions_UseComThreading on advise events interfaces. uiautomationcore: Get IRawElementProviderAdviseEvents interfaces from embedded fragment root providers. Daniel Lehman (2): msi: Release record instead of free. riched20: Update paragraph position in marked tree. David Kahurani (1): gdiplus: Handle Windows style newline. Davide Beatrici (38): wined3d: Fix uninitialized variable warning. winepulse: Move AudioClient3 into mmdevapi. winealsa: Use mmdevapi's AudioClient3. winecoreaudio: Use mmdevapi's AudioClient3. wineoss: Use mmdevapi's AudioClient3. winepulse: Move AudioClient2 into mmdevapi. winealsa: Use mmdevapi's AudioClient2. winecoreaudio: Use mmdevapi's AudioClient2. wineoss: Use mmdevapi's AudioClient2. winepulse: Always initialize ref to 1 in session wrapper. winepulse: Move session_wrapper_create into mmdevapi. winealsa: Use mmdevapi's session_wrapper_create. winecoreaudio: Use mmdevapi's session_wrapper_create. wineoss: Use mmdevapi's session_wrapper_create. winepulse: Lock sessions in AudioClient's GetService. winepulse: Move AudioClient's GetService into mmdevapi. winealsa: Use mmdevapi's AudioClient's GetService. winecoreaudio: Use mmdevapi's AudioClient's GetService. wineoss: Use mmdevapi's AudioClient's GetService. winepulse: Move AudioClient's SetEventHandle, Reset, Stop into mmdevapi. winealsa: Use mmdevapi's AudioClient's SetEventHandle, Reset, Stop. winecoreaudio: Use mmdevapi's AudioClient's SetEventHandle, Reset, Stop. wineoss: Use mmdevapi's AudioClient's SetEventHandle, Reset, Stop. winepulse: Lock sessions in AudioClient's Start. winecoreaudio: Lock sessions in AudioClient's Start. winepulse: Move AudioClient's Start into mmdevapi. winealsa: Use mmdevapi's AudioClient's Start. winecoreaudio: Use mmdevapi's AudioClient's Start. wineoss: Use mmdevapi's AudioClient's Start. winepulse: Move AudioClient's GetDevicePeriod, GetMixFormat, IsFormatSupported into mmdevapi. winealsa: Use mmdevapi's AudioClient's GetDevicePeriod, GetMixFormat, IsFormatSupported. winecoreaudio: Use mmdevapi's AudioClient's GetDevicePeriod, GetMixFormat, IsFormatSupported. wineoss: Use mmdevapi's AudioClient's GetDevicePeriod, GetMixFormat, IsFormatSupported. winepulse: Move AudioClient's GetCurrentPadding, GetStreamLatency, GetBufferSize into mmdevapi. winealsa: Use mmdevapi's AudioClient's GetCurrentPadding, GetStreamLatency, GetBufferSize. winecoreaudio: Use mmdevapi's AudioClient's GetCurrentPadding, GetStreamLatency, GetBufferSize. wineoss: Use mmdevapi's AudioClient's GetCurrentPadding, GetStreamLatency, GetBufferSize. mmdevapi: Handle CreateThread() failure in AudioClient's Start. Eric Pouech (5): dbghelp: Better handle very long C++ qualified identifiers in dwarf. dbghelp/tests: Fix process kind detection on old Windows machines. dbghelp/tests: Review old-wow64 expected values. dbghelp/tests: Add more tests for module imagename handling. dbghelp: Reimplement EnumerateLoadedModules(). Gabriel Ivăncescu (6): mshtml: Fix classList toggle() when return value pointer is NULL. jscript: Return undefined for empty RegExp captures in ES5+ mode. jscript: Throw proper error for unexpected quantifiers in RegExp. jscript: Throw proper error for out of memory conditions in RegExp. mshtml/tests: Test RegExp.toString on object with separate RegExp flag props. mshtml: Handle protocols with no ports when checking target origin. Georg Lehmann (1): winevulkan: Update to VK spec version 1.3.251. Giovanni Mascellani (6): dxgi: Document some struct d3d12_swapchain fields. dxgi: Rename d3d12_swapchain_prepare_command_buffers(). dxgi: Store Vulkan formats in the swapchain object. dxgi: Factor out d3d12_swapchain_create_image_resources(). dxgi: Move non-Vulkan-specific code out of d3d12_swapchain_create_vulkan_swapchain(). dxgi: Move Vulkan-specific code to d3d12_swapchain_create_vulkan_swapchain(). Jacek Caban (8): win32u: Use syscall interface for all ntuser functions. win32u: Implement NtGdiIcmBrushInfo and use it instead of __wine_get_brush_bitmap_info. win32u: Extend NtGdiSetDIBitsToDeviceInternal for SetDIBits implementation. win32u: Don't return full OUTLINETEXTMETRICW from __wine_get_file_outline_text_metric. win32u: Use syscall interface for all exports. ntdll: Get rid of hacks for direct unix calls. wineps: Don't include gdi_driver.h from PE module. win32u: Don't use CDECL for gdi_dc_funcs entries. Jinoh Kang (7): kernel32/tests: Remove test for ACTCTX_FLAG_HMODULE_VALID with hModule = NULL case. kernel32/tests: Test setting lpResourceName to NULL for CreateActCtxW. ntdll: Move ACTCTX lpResourceName validation to RtlCreateActivationContext. kernel32/tests: Test loading assembly manifest resource inside dependencies. ntdll: Don't hard-code DLL manifest resource ID when looking up dependency assembly. user32/tests: Test for update region after showing a child window. server: Update parent window region when exposing previously invisible window. Joshua Ashton (1): winevulkan: Include function name in asserts. Martin Storsjö (1): include: Fix the use of __getReg for aarch64/msvc mode. Michael Stefaniuc (3): ws2_32/tests: Remove superfluous casts to self. wmvcore: Remove superfluous casts to self. dbghelp: Remove superfluous casts to self. Nikolay Sivov (8): ole32/antimoniker: Use CRT allocation functions. ole32/antimoniker: Fix Enum() return error code. ole32/classmoniker: Use CRT allocation functions. ole32/pointermoniker: Use CRT allocation functions. ole32/itemmoniker: Use CRT allocation functions. ole32/compositemoniker: Use CRT allocation functions. ole32/filemoniker: Use CRT allocation functions. ole32/git: Use CRT allocation functions. Paul Gofman (13): ntdll: Support MEM_COALESCE_PLACEHOLDERS in NtFreeVirtualMemory(). ntdll: Factor out unmap_view_of_section() function. kernelbase/tests: Add tests for MEM_PRESERVE_PLACEHOLDER with UnmapViewOfFile2(). ntdll: Validate flags in NtUnmapViewOfSectionEx(). ntdll: Support MEM_PRESERVE_PLACEHOLDER in NtUnmapViewOfSectionEx(). winegstreamer: Don't pre-check sample size in wg_transform_read_mf(). kernelbase: Don't modify non-volatile regs in RaiseException() on x64. ws2_32: Make wait in accept() alertable. ws2_32: Make wait in connect() alertable. ws2_32: Make wait in WSAPoll() alertable. ws2_32: Test wait alertability in WSAGetOverlappedResult(). winegstreamer: Implement MFT_MESSAGE_COMMAND_DRAIN for the H264 decoder. winegstreamer: Implement MFT_MESSAGE_COMMAND_FLUSH for the H264 decoder. Piotr Caban (12): msvcr100: Fix next writer unblocking in reader_writer_lock::unlock. msvcr100: Use Context to store critical_section owner. msvcr100: Use Context blocking functions in critical_section class. make_unicode: Don't use Türkiye as it can't be encoded in some locales. msvcr100: Use Context blocking functions in event class. msvcr100: Use Context blocking functions in Concurrency::wait(). localspl: Don't pass original document name to cupsStartDocument. msvcr100: Fix use after free in critical_section::try_lock_for(). msvcr100: Add support for COOPERATIVE_TIMEOUT_INFINITE timeout in critical_section. msvcr100: Use block_context_for helper in Concurrency::wait(). msvcr100: Use block_context_for helper in event::wait(). msvcr100: Use Context blocking functions in _Condition_variable class. Rémi Bernon (44): winegstreamer: Forbid vaapidecodebin when looking for a specific element. winegstreamer: Only warn on wg_transform input buffer push errors. winegstreamer: Set the default H264 caps profile to "baseline". server: Assume the internal clip message to be WM_WINE_CLIPCURSOR. server: Move set_cursor desktop local variable to wider scope. win32u: Rename user driver CreateDesktopWindow entry to SetDesktopWindow. win32u: Call SetDesktopWindow when desktop window is successfully created. explorer: Load graphics driver before calling CreateDesktopW. explorer: Use root window if driver doesn't implement create_desktop. explorer: Don't call driver create_desktop if desktop name is "root". explorer: Call user driver through a new CreateDesktop callback. wineandroid: Use the user driver interface to create host desktops. winex11: Use the user driver interface to create host desktops. explorer: Remove now unnecessary wine_create_desktop entry. imm32: Query the new input context in ImmAssociateContextEx / IACE_DEFAULT. server: Use get_hardware_msg_bit consistently to classify messages. win32u: Move some window functions to window.c. win32u: Move cursor clipping functions to input.c. win32u: Add a separate function to process WM_WINE_CLIPCURSOR. win32u: Use WM_WINE_CLIPCURSOR / TRUE for empty clipping rect. user32: Remove now unused virtual screen helpers. mf/tests: Add H264 decoder tests with concatenated streams. winegstreamer: Use an IMFMediaType for the internal stream type. winegstreamer: Generate H264 timestamps using the input type frame rate. winegstreamer: Use the output wg_format in CAPS sink query. user32/tests: Zero-initialize keyboard state array. user32/tests: Add a helper to run a test in a process. user32/tests: Test more ClipCursor reset scenarios. winegstreamer: Pass desired output plane alignment to wg_transform_create. winegstreamer: Pass desired input queue length to wg_transform_create. winegstreamer: Implement MF_LOW_LATENCY attribute and latency query. win32u: Reset cursor clipping rectangle on display mode change. winex11: Rely on win32u to reset clipping on display mode change. winex11: Reset clipping by calling NtUserClipCursor directly. server: Don't reset cursor clipping on foreground thread exit. kernelbase: Comment out DECLSPEC_HOTPATCH for ConvertThreadToFiber. evr/tests: Test IMFVideoDisplayControl_GetCurrentImage orientation. evr: Respect RGB format stride in GetCurrentImage. win32u: Add a reset parameter to WM_WINE_CLIPCURSOR and driver ClipCursor. server: Use the helper to reset the clip rect when the desktop size changes. server: Use a separate helper to merge WM_MOUSEMOVE messages. server: Queue a hardware WM_WINE_CLIPCURSOR message to the foreground thread. win32u: Asynchronously apply or reset ClipCursor from the hardware message. winex11: Remove now unnecessary ClipCursor forwarding to foreground thread. Santino Mazza (1): riched20: Call ME_UpdateRepaint instead of editor_ensure_visible in set_selection. Shaun Ren (8): sapi: Implement ISpObjectToken::CreateKey. sapi: Partially reimplement ISpObjectTokenEnumBuilder storing a token array. sapi: Implement token filtering and sorting in ISpObjectTokenEnumBuilder. sapi: Add SpMMAudioOut stub. sapi: Implement ISpMMSysAudio::Get/SetDeviceId. sapi: Add GUIDs SPDFID_Text/WaveFormatEx. include: Add sperror error code SPERR_UNSUPPORTED_FORMAT. sapi: Implement ISpMMSysAudio::Get/SetFormat. Tim Clem (1): loader: Reserve some space for 32-bit top-down allocations on 64-bit. Zebediah Figura (10): winebuild: Use segment prefixes in 16-bit stack switching code instead of writing out byte values. winebuild: Use the lretw mnemonic in wine_call_to_16(). wow32: Use spec file imports. ntdll: Do not throw deadlock exceptions for Wine critical sections. ntdll: Simplify critical section timeout logic. xaudio2/tests: Add a couple of helpers to abstract the difference between versions. xaudio2: Move CreateAudioVolumeMeter() and CreateAudioReverb() to xapo.c. xaudio2: Create XAPO objects directly from CreateAudioVolumeMeter() and CreateAudioReverb(). xaudio2: Use the preprocessor to modify definitions in xaudio2.idl and xaudio2fx.idl. xaudio2/tests: Fix the IID_IXAPO query. Zhiyi Zhang (6): gdiplus/tests: Add pen custom line cap record and play back tests. gdiplus: Support recording pen custom start line cap. gdiplus: Support recording pen custom end line cap. gdiplus: Support playing back pen custom start line cap. gdiplus: Support playing back pen custom end line cap. winegstreamer: Fix check for non-zero padding in mf_media_type_from_wg_format_video(). Ziqing Hui (5): mf/tests: Test input type for WMA decoder DMO. mf/tests: Test output type for WMA decoder DMO. mf/tests: Split input type tests from test_wmv_decoder_media_object. mf/tests: Split output type tests from test_wmv_decoder_media_object. mf/tests: Split size info tests from test_wmv_decoder_media_object.