At the end of LIST_FOR_EACH_ENTRY, assuming no matches are found, `provider` will point to the list
head, not NULL, as a result we call IsEqualGUID on invalid memory.
--
v2: crypt32: Fix invalid access of list head.
https://gitlab.winehq.org/wine/wine/-/merge_requests/8179
I was able to replicate the issue seen in [Bug 58113](https://bugs.winehq.org/show_bug.cgi?id=58113) on my M1.
The issue stems from the usage of AudioDevicePropertyVolumeScalar, which the audio driver for the M1 does not support (at least so it appears.) Using AudioObjectIsPropertySettable allows for fast checking for this situation, including preemptively disabling main channel audio if it appears to be unsupported.
--
v4: winecoreaudio: quality improvements
Revert "winecoreaudio: Implement per-channel volume control."
https://gitlab.winehq.org/wine/wine/-/merge_requests/7920
@alexhenrie @zhiyi
Description:
When flags does not include DT_CALCRECT, since len is calculated in the middle,
it will be reduced to zero. Resulting in the length of the processed string that
is finally returned to zero and the non-processing string length is unchanged.
But some application taking the non-processing string length to zero as the loop
end condition.
The test case's merge request number is 8177.
Signed-off-by: chenjiangyi <chenjiangyi(a)uniontech.com>
--
https://gitlab.winehq.org/wine/wine/-/merge_requests/8178
@alexhenrie @zhiyi
The corresponding Windows test demo is as follows:
[test_DrawTextExW.exe](/uploads/ff1eafc9c58ac03b598699a93136484c/test_DrawTextExW.exe)
[test_DrawTextExW.c](/uploads/a41719a33c2ee0e057c911933bf55180/test_DrawTextExW.c)
Signed-off-by: chenjiangyi <chenjiangyi(a)uniontech.com>
Change-Id: I64052ba8aa8161ad83c1811d642aedbe462ef5ea
--
https://gitlab.winehq.org/wine/wine/-/merge_requests/8177
This is required to fix video playback in Crashlands 2 on Proton 10.
--
v2: mfreadwrite: Fix media type output when video processor is used.
mfreadwrite/tests: Check DEFAULT_STRIDE is not always present.
https://gitlab.winehq.org/wine/wine/-/merge_requests/8172
I was able to replicate the issue seen in [Bug 58113](https://bugs.winehq.org/show_bug.cgi?id=58113) on my M1.
The issue stems from the usage of AudioDevicePropertyVolumeScalar, which the audio driver for the M1 does not support (at least so it appears.) Using AudioObjectIsPropertySettable allows for fast checking for this situation, including preemptively disabling main channel audio if it appears to be unsupported.
--
v3: winecoreaudio: Fixed outdated params, improvements
Revert "winecoreaudio: Implement per-channel volume control."
https://gitlab.winehq.org/wine/wine/-/merge_requests/7920
On Tue Apr 22 19:17:10 2025 +0000, Kevin Puetz wrote:
> Yes, but not as rebased to master (we're quite a bit behind, so I just
> ran things through testbot.winehq.org before submitting rather than
> doing a full local build of 10.6). I'll mark as draft for now and do
> some more testing...
Ok, my apologies that this took so long to get back to. The fix was sound, but the test was completely flawed and I'm not sure how it seemed to work the first time. The key problem is that, since the whole scenario involves a hostapartment, the class factory will be a proxy. And to keep cross-thread traffic down, proxies keep their own refcount, with the proxy owning a single refcount to the stub, which owns a single refcount to the real implementing object. So observing the refcount of the proxy could never have shown whether the actual implementation had been leaked.
So now the test instead checks the way we observed the problem in real life - we put a "real" CLSID in to testlib.dll, and notice that the existence of any external refcounts on the class factory object has caused testlib.dll's DllCanUnloadNow to return S_FALSE.
So now the compobj test I added seems OK
ole32:compobj start dlls/ole32/tests/compobj.c
ole32:compobj:0c0c done (0) in 2s 1498B
However, pipeline is still showing VM failure on mac
> no IP address found, is your VM running
And a failure on linux-32, not in the test I changed:
> ole32:clipboard:0bf8 done (0) in 0s 5076B
> ole32:compobj start dlls/ole32/tests/compobj.c
which is where my new test is - the failure is later
> ole32:marshal start dlls/ole32/tests/marshal.c
> marshal.c:4214:0.026 Test failed: got 0
> marshal.c:4223:0.027 Test failed: Number of locks should be 0, but actually is 2
These marshal.c failures seem to be present in other PRs too (including ones that merged last night), so I assume they are unrelated...
--
https://gitlab.winehq.org/wine/wine/-/merge_requests/7880#note_104932
Before this, stopping and restarting the media session
could cause MFT streams to get stuck in the "already pending"
state, which would lead to no more samples getting delivered.
This also reverts 18c0dd7390b354d2e505e54cd3f3f9b08226b265,
my previous attempt to fix the problem which for some reason
seemed to help - but with the new fix, it does not make any
difference.
The reverted commit is faulty since the Flush() method - which is called at session Stop, but runs after sample_grabber_set_state - already releases pending items, while processing markers immediately.
Sorry for the trouble.
--
https://gitlab.winehq.org/wine/wine/-/merge_requests/8175
Generic ATTribute Profile (GATT) is a protocol used by BLE devices for data exchange. Broadly, every LE device contains one or more GATT services, with each service having multiple characteristics, which contain the actual piece of data to be exchanged. The Win32 BLE api is defined in [`bluetoothleapis.h`](https://learn.microsoft.com/en-us/windows/win32/api/bluetoothleapis/), and operates on `HANDLE`s to PDOs created by the driver to remote devices and services, using the `GUID_BLUETOOTHLE_DEVICE_INTERFACE` and `GUID_BLUETOOTH_GATT_SERVICE_DEVICE_INTERFACE` class interfaces respectively.
This MR introduces initial support for accessing GATT services on LE devices by:
* Creating PDOs for remote devices that we discover GATT services on, and enabling `GUID_BLUETOOTHLE_DEVICE_INTERFACE` for them.
* Because the driver also creates PDOs for bluetooth radios, a tagged union is used to distinguish between device extension values to dispatch IOCTL and PnP IRPs appropriately.
* Enumerate through all `org.bluez.GattService1` objects on BlueZ, and store them on the PE driver inside the associated devices.
* Implement IOCTL_WINEBTH_LE_DEVICE_GET_GATT_SERVICES for device PDOs.
* Use the newly added IOCTL to implement [`BluetoothGATTGetServices`](https://learn.microsoft.com/en-us/windows/win32/api/bluetoothleapis/nf-bluetoothleapis-bluetoothgattgetservices).
--
v2: bluetoothapis/tests: Add tests for BluetoothGATTGetServices.
bluetoothapis: Implement BluetoothGATTGetServices.
winebth.sys: Implement IOCTL_WINEBTH_LE_DEVICE_GET_GATT_SERVICES.
winebth.sys: Store a list of GATT services discovered on LE devices.
https://gitlab.winehq.org/wine/wine/-/merge_requests/8174
Function GdipGetImageAttributesAdjustedPalette gets [called with type = -1](https://gitlab.winehq.org/wine/wine/-/blob/22af42ac22279e6c0c671f033661f95c1761b4bb/dlls/gdiplus/tests/image.c?page=6#L5649) and therefore accesses several arrays at index -1.
This patch adds a helper which additionally checks for `type >= ColorAdjustTypeDefault`.
<details>
<summary>ASan output</summary>
```
=================================================================
==gdiplus_test.exe==308==ERROR: AddressSanitizer: heap-buffer-overflow on address 0x7f21342c57f8 at pc 0x6ffffadfd25b bp 0x7ffffe1ff750 sp 0x7ffffe1ff798
READ of size 4 at 0x7f21342c57f8 thread T0
#0 0x6ffffadfd25a in apply_image_attributes .../dlls/gdiplus/graphics.c:929:41
#1 0x6ffffae5c2f2 in GdipGetImageAttributesAdjustedPalette .../dlls/gdiplus/imageattributes.c:123:5
#2 0x000140084b59 in test_getadjustedpalette .../dlls/gdiplus/tests/image.c:5649:12
#3 0x000140062be6 in func_image .../dlls/gdiplus/tests/image.c:6719:5
#4 0x0001400c9132 in run_test .../include/wine/test.h:765:5
#5 0x0001400c8b50 in main .../include/wine/test.h:884:12
#6 0x0001400cad3a in mainCRTStartup .../dlls/msvcrt/crt_main.c:60:11
#7 0x6fffffc45aa0 in BaseThreadInitThunk .../dlls/kernel32/thread.c:61:24
#8 0x6fffffdcc776 in RtlUserThreadStart (C:\windows\system32\ntdll.dll+0x17004c776)
0x7f21342c57f8 is located 144 bytes after 1256-byte region [0x7f21342c5280,0x7f21342c5768)
freed by thread T0 here:
#0 0x6ffffe88aab1 in free C:/llvm-mingw/llvm-mingw/llvm-project/compiler-rt/lib/asan\asan_malloc_win.cpp:71:3
#1 0x6ffffae5c21d in GdipDisposeImageAttributes .../dlls/gdiplus/imageattributes.c:109:5
#2 0x000140083598 in test_colorkey .../dlls/gdiplus/tests/image.c:3709:5
#3 0x000140062bd7 in func_image .../dlls/gdiplus/tests/image.c:6716:5
#4 0x0001400c9132 in run_test .../include/wine/test.h:765:5
#5 0x0001400c8b50 in main .../include/wine/test.h:884:12
#6 0x0001400cad3a in mainCRTStartup .../dlls/msvcrt/crt_main.c:60:11
#7 0x6fffffc45aa0 in BaseThreadInitThunk .../dlls/kernel32/thread.c:61:24
#8 0x6fffffdcc776 in RtlUserThreadStart (C:\windows\system32\ntdll.dll+0x17004c776)
previously allocated by thread T0 here:
#0 0x6ffffe88ace6 in calloc C:/llvm-mingw/llvm-mingw/llvm-project/compiler-rt/lib/asan\asan_malloc_win.cpp:91:3
#1 0x6ffffae5c0fc in GdipCreateImageAttributes .../dlls/gdiplus/imageattributes.c:87:18
#2 0x000140082bf9 in test_colorkey .../dlls/gdiplus/tests/image.c:3629:12
#3 0x000140062bd7 in func_image .../dlls/gdiplus/tests/image.c:6716:5
#4 0x0001400c9132 in run_test .../include/wine/test.h:765:5
#5 0x0001400c8b50 in main .../include/wine/test.h:884:12
#6 0x0001400cad3a in mainCRTStartup .../dlls/msvcrt/crt_main.c:60:11
#7 0x6fffffc45aa0 in BaseThreadInitThunk .../dlls/kernel32/thread.c:61:24
#8 0x6fffffdcc776 in RtlUserThreadStart (C:\windows\system32\ntdll.dll+0x17004c776)
SUMMARY: AddressSanitizer: heap-buffer-overflow .../dlls/gdiplus/graphics.c:929:41 in apply_image_attributes
Shadow bytes around the buggy address:
0x7f21342c5500: fd fd fd fd fd fd fd fd fd fd fd fd fd fd fd fd
0x7f21342c5580: fd fd fd fd fd fd fd fd fd fd fd fd fd fd fd fd
0x7f21342c5600: fd fd fd fd fd fd fd fd fd fd fd fd fd fd fd fd
0x7f21342c5680: fd fd fd fd fd fd fd fd fd fd fd fd fd fd fd fd
0x7f21342c5700: fd fd fd fd fd fd fd fd fd fd fd fd fd fa fa fa
=>0x7f21342c5780: fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa[fa]
0x7f21342c5800: fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa
0x7f21342c5880: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
0x7f21342c5900: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
0x7f21342c5980: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
0x7f21342c5a00: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
Shadow byte legend (one shadow byte represents 8 application bytes):
Addressable: 00
Partially addressable: 01 02 03 04 05 06 07
Heap left redzone: fa
Freed heap region: fd
Stack left redzone: f1
Stack mid redzone: f2
Stack right redzone: f3
Stack after return: f5
Stack use after scope: f8
Global redzone: f9
Global init order: f6
Poisoned by user: f7
Container overflow: fc
Array cookie: ac
Intra object redzone: bb
ASan internal: fe
Left alloca redzone: ca
Right alloca redzone: cb
==gdiplus_test.exe==308==ABORTING
```
</details>
--
v2: gdiplus: Add check of type parameter to be positive (ASan).
https://gitlab.winehq.org/wine/wine/-/merge_requests/8141
Visual testing shows that using Shift+Ctrl adds to the selection,
which is what existing code already does. The problem is that it
updates selection mark when it shouldn't.
And the bigger problem of course is that it's using static variable
for state.
Signed-off-by: Nikolay Sivov <nsivov(a)codeweavers.com>
--
https://gitlab.winehq.org/wine/wine/-/merge_requests/8165
Streams hold a reference to the source, but this reference should not be taken until `Start()` is called because freeing the media source depends on release in `Shutdown()` of the stream's reference to the source. We could create the streams in `media_source_create()` and take source refs for them in `Start()`, but that's potentially confusing and fragile.
Streams can persist after the media source is destroyed. In that case, they cannot access the source object and it should be released and set to null. Windows behaviour is to release references to the source in `Shutdown()`. If we don't do this and a buggy app were to leak a stream object, the media source object would also leak and `wg_parser_destroy()` would not be called.
--
v6: winegstreamer: Release stream references to the media source in Shutdown().
winegstreamer: Do not create MF stream objects until the media source is started.
mfplat/tests: Test video stream release after media source release.
mfplat/tests: Add more media source refcount checks.
https://gitlab.winehq.org/wine/wine/-/merge_requests/6783
Description:
When flags does not include DT_CALCRECT, since len is calculated in the middle,
it will be reduced to zero. Resulting in the length of the processed string that
is finally returned to zero and the non-processing string length is unchanged.
But some application taking the non-processing string length to zero as the loop
end condition.
Log:
Signed-off-by: chenjiangyi <chenjiangyi(a)uniontech.com>
Change-Id: Icc0f250f5f4faba1bee8326fc911a4fc9cd7c012
--
v6: user32: Fix the number of characters processed by DrawTextExW.
user32/tests: Add tests for DrawTextExW.
https://gitlab.winehq.org/wine/wine/-/merge_requests/4812
Windows uses a smaller alignment than gstreamer for some formats, for
example NV12. This means we cannot use MFCalculateImageSize() to get the
output sample size. Commit 7b79e3a87b1e switched to calling it instead of
GetOutputStreamInfo() to fix some game bugs.
--
v5: winegstreamer: Call wg_format_get_max_size() to get the video decoder output sample size.
winegstreamer: Do not pass a sample size to wg_transform_read_mf().
mf/tests: Add a video processor NV12 test with a width alignment of 2.
mfplat/tests: Add NV12 650 x 850 to image_size_tests.
https://gitlab.winehq.org/wine/wine/-/merge_requests/8034
This introduces a faster implementation of signal and wait operations on NT
events, semaphores, and mutexes, which improves performance to native levels for
a wide variety of games and other applications.
The goal here is similar to the long-standing out-of-tree "esync" and "fsync"
patch sets, but without the flaws that make those patch sets not upstreamable.
The Linux "ntsync" driver is not currently released. It has been accepted into
the trunk Linux tree for 6.14, so barring any extraordinary circumstances, the
API is frozen and it will be released in its current form in about 2 months.
Since it has passed all relevant reviewers on the kernel side, and the API is
all but released, it seems there is no reason any more not to submit the Wine
side to match.
Some important notes:
* This patch set does *not* include any way to disable ntsync support, since
that kind of configuration often seems to be dispreferred where not necessary.
In essence, ntsync should just work everywhere.
Probably the easiest way to effectively disable ntsync, for the purposes of
testing, is to chmod the /dev/ntsync device to prevent its being opened.
Regardless, a Wine switch to disable ntsync can be added simply enough. Note
that it should probably not take the form of a registry key, however, since it
needs to be easily accessible from the server itself.
* It is, generally speaking, not possible for only some objects, or some
processes, to have backing ntsync objects, while others use the old server
path. The esync/fsync patch sets explicitly protected against this by making
sure every process had a consistent view of whether esync was enabled. This is
not provided here, since no switch is provided to toggle ntsync, and it should
not be possible to get into such an inconsistent state without gross
misconfiguration.
* Similarly, no diagnostic messages are provided to note that ntsync is in use,
or not in use. These messages are part of esync/fsync, as well as part of
ntsync "testing" trees unofficially distributed. However, if ntsync is working
correctly, no message should be necessary.
The basic structure is:
* Each type of server object which can be waited on by the client (including
events, semaphores, mutexes, but also other types such as processes, files)
must store an "inproc_sync" object.
This "inproc_sync" object is a full server object (note that this differs from
esync/fsync). A vector and server request is introduced to retrieve an NT
handle to this object from an arbitrary NT handle.
Since the actual ntsync objects are simply distinct file descriptions, we then
call get_handle_fd from the client to retrieve an fd to the object, and then
perform ioctls on it.
* Objects signaled by the server (processes, files, etc) perform ntsync ioctls
on that object. The backing object in all such cases is simply an event.
* Signal and wait operations on the client side attempt to defer to an
"inproc_\*" function, falling back to the server implementation if it returns
STATUS_NOT_IMPLEMENTED. This mirrors how in-process synchronization objects
(critical sections, SRW locks, etc) used to be implemented—attempting to use
an architecture-specific "fast_\*" function and falling back if it returned
STATUS_NOT_IMPLEMENTED.
* The inproc_sync handles, once retrieved, are cached per-process. This caching
takes a similar form to the fd cache. It does not reuse the same
infrastructure, however.
The primary reason for this is that the fd cache is designed to fit within a
64-bit value and uses 64-bit atomic operations to ensure consistency. However,
we need to store more than 64 bits of information. [We also need to modify
them after caching, in order to correctly implement handle closing—see below.]
The secondary reason is that retrieving the ntsync fd from the inproc_sync
handle itself uses the fd cache.
* In order to keep the Linux driver simple, it does not implement access flags
(EVENT_MODIFY_STATE etc.) Instead, the flags are cached locally and validated
there. This too mirrors the fd cache. Note that this means that a malicious
process can now modify objects it should not be able modify—which is less true
than it is with wineserver—but this is no different from the way other objects
(notably fds) are handled, and would require manual syscalls.
* In order to achieve correct behaviour related to closing objects while they
are used, this patch set essentially relies on refcounting. This is broadly
true of the server as well, but because we need to avoid server calls when
performing object operations, significantly more care must be taken.
In particular, because waits need to be interruptable by signals and then be
restarted, we need the backing ntsync object to remain valid until all users
are done with it. On a process level, this is achieved by letting multiple
processes own handles to the underlying inproc_sync server object.
On a thread level, multiple simultaneous calls need to refcount the process's
local handle. This refcount is stored in the sync object cache. When it
reaches zero, the cache is cleared.
Punting this behaviour to the Linux driver would have introduced a great deal
more complexity, which is best kept in userspace and out of the kernel.
* The cache is, as such, treated as a cache. The penultimate commit, which
introduces client support but does not yet cache the objects, effectively
illustrates this by never actually caching anything, and retrieving a new NT
handle and fd every time.
* Certain waits, on internal handles (such as async, startup_info, completion),
are delegated to the server even when ntsync is used. Those server objects do
not create an underlying ntsync object.
--
v6: ntdll: Cache in-process synchronization objects.
ntdll: Use server_wait_for_object() when waiting on only the queue object.
ntdll: Use in-process synchronization objects.
ntdll: Introduce a helper to wait on an internal server handle.
server: Allow creating an event object for client-side user APC signaling.
server: Introduce select_inproc_queue and unselect_inproc_queue requests.
server: Add a request to retrieve the in-process synchronization object from a handle.
server: Create in-process synchronization objects for fd-based objects.
server: Create in-process synchronization objects for timers.
server: Create in-process synchronization objects for threads.
server: Create in-process synchronization objects for message queues.
server: Create in-process synchronization objects for jobs.
server: Create in-process synchronization objects for processes.
server: Create in-process synchronization objects for keyed events.
server: Create in-process synchronization objects for device managers.
server: Create in-process synchronization objects for debug objects.
server: Create in-process synchronization objects for console outputs.
server: Create in-process synchronization objects for console inputs.
server: Create in-process synchronization objects for screen buffers.
server: Create in-process synchronization objects for console servers.
server: Create in-process synchronization objects for consoles.
server: Create in-process synchronization objects for completion ports.
server: Create in-process synchronization objects for mutexes.
server: Create in-process synchronization objects for semaphores.
server: Create in-process synchronization objects for events.
server: Add an object operation to retrieve an in-process synchronization object.
ntdll: Retrieve and cache an ntsync device in wait calls.
This merge request has too many patches to be relayed via email.
Please visit the URL below to see the contents of the merge request.
https://gitlab.winehq.org/wine/wine/-/merge_requests/7226
--
v2: win32u: Read window dpi_context from the shared memory.
win32u: Pass id and offset separately to find_shared_session_object.
server: Move window dpi_context to the shared memory.
server: Allocate shared memory objects for windows.
server: Fix shared object offset when additional blocks are allocated.
https://gitlab.winehq.org/wine/wine/-/merge_requests/8061
--
v4: win32u: Drop now unused wglShareLists entry points.
opengl32: Implement wglShareLists by copying after recreation.
win32u: Drop now unused wglCopyContext entry points.
opengl32/tests: Add more tests with wglCopyContext after usage.
opengl32: Implement wglCopyContext with tracked attributes.
opengl32: Track a subset of the context attributes.
opengl32: Track current context attributes changes.
opengl32/tests: Test wglShareLists with modified contexts.
opengl32: Generate args loading / locking for wrapped functions.
opengl32: Use cached attributes to detect legacy contexts.
opengl32: Cache context creation attributes.
opengl32: Simplify wglMake(Context)Current control flow.
https://gitlab.winehq.org/wine/wine/-/merge_requests/8148
Add `IOCTL_WINEBTH_RADIO_START_AUTH`, which gets used to implement `BluetoothAuthenticateDeviceEx`.
--
v13: bluetoothapis/tests: Add tests for BluetoothAuthenticateDeviceEx.
bluetoothapis: Use a wizard GUI to respond to pairing requests if an authentication callback is not registered.
https://gitlab.winehq.org/wine/wine/-/merge_requests/7885
Implements IRegisteredTaskCollection get_Count and get_Item along with a test for both. When making the tests individually they were very similar so I merged them into one test function as per feedback.
--
v5: taskschd/regtask: Implements IRegisteredTaskCollection get_Count().
https://gitlab.winehq.org/wine/wine/-/merge_requests/8166
Implements IRegisteredTaskCollection get_Count and get_Item along with a test for both. When making the tests individually they were very similar so I merged them into one test function as per feedback.
--
v4: taskschd/regtask: Implements IRegisteredTaskCollection get_Count().
taskschd/regtask: Implements IRegisteredTaskCollection get_Item().
taskschd/tests: Adds a test for IRegisteredTaskCollection get_Item and get_Count.
https://gitlab.winehq.org/wine/wine/-/merge_requests/8166
Implements IRegisteredTaskCollection get_Count and get_Item along with a test for both. When making the tests individually they were very similar so I merged them into one test function as per feedback.
--
v3: taskschd/regtask: Implements IRegisteredTaskCollection get_Count().
taskschd/regtask: Implements IRegisteredTaskCollection get_Item().
https://gitlab.winehq.org/wine/wine/-/merge_requests/8166
Implements IRegisteredTaskCollection get_Count and get_Item along with a test for both. When making the tests individually they were very similar so I merged them into one test function as per feedback.
--
v2: taskschd/regtask: Implements IRegisteredTaskCollection get_Count().
taskschd/regtask: Implements IRegisteredTaskCollection get_Item().
taskschd/tests: Adds a test for IRegisteredTaskCollection get_Item and get_Count.
https://gitlab.winehq.org/wine/wine/-/merge_requests/8166
Implements IRegisteredTaskCollection get_Count and get_Item along with a test for both. When making the tests individually they were very similar so I merged them into one test function as per feedback.
--
https://gitlab.winehq.org/wine/wine/-/merge_requests/8166
thanks for taking care of this
1) from pattern page Rémi pointed out, failures to get export also exist in Win8, so your patch title should be modified accordingly
2) testing for skip_nt on top of test_FreeConsoleStd(void) alongside pVerifyConsoleIoHandle should workaround the Win7 failures
the rest LGTM
--
https://gitlab.winehq.org/wine/wine/-/merge_requests/8162#note_104799
On Fri May 23 16:23:37 2025 +0000, Matteo Bruni wrote:
> Out of curiosity, what happens with BMP?
It's just unsupported for BMP for some reason, there's a test in surface.c for it:
```
hr = D3DXGetImageInfoFromFileInMemory(bmp_2bpp, sizeof(bmp_2bpp), &info);
ok(hr == D3DXERR_INVALIDDATA, "D3DXGetImageInfoFromFileInMemory returned %#lx, expected %#x\n", hr, D3DXERR_INVALIDDATA);
```
Which explains why we had all the other WIC indexed formats _except_ for 2bpp in our `wic_pixel_formats` table :) Seems odd to support 1bpp and 4bpp but not 2bpp, but :man_shrugging:
--
https://gitlab.winehq.org/wine/wine/-/merge_requests/8056#note_104797
Before this, if the grabber is stopped while items are
pending and then restarted, it would stop delivering any
items because it does not start the timer while the
pending item list is non-empty.
--
v3: mf: Release pending items when sample grabber is stopped.
https://gitlab.winehq.org/wine/wine/-/merge_requests/8159
Follow-up of !2786, which appears to have been abandoned.
# Execute minimal test case
1. in dlls/ws2_32/tests/sock.c wrap all calls to test functions after `Init()` until `test_afunix()` with #if 0 ... #endif
2. checkout wine into ~/src/wine
3. build into ~/src/wine-build
4. run `(cd ~/src/wine-build; WINEPREFIX=~/src/wine/.wine ../wine/tools/runtest -q -P wine -T . -M ws2_32.dll -p dlls/ws2_32/tests/i386-windows/ws2_32_test.exe sock)`
# How to debug wineserver
Since `wineserver` runs in the background, simple calls to printf() will show nothing when the test case is executed. A workaround is to open a file and call fprintf() to write debug messages to this file, which can then be inspected.
--
v27: ws2_32: Add note in bind() for AF_UNIX sockets
ws2_32/tests: In tests for AF_UNIX sockets print actual directory used
ws2_32/tests: In AF_UNIX socket tests always print used path in case of errors
ws2_32/tests: Add test for AF_UNIX sockets
server: Fix getsockname() and accept() on AF_UNIX sockets.
server: Introduce error when attempting to create a SOCK_DGRAM AF_UNIX socket.
server: Allow for deletion of socket files.
ws2_32: Add support for AF_UNIX sockets.
ws2_32: Add afunix.h header.
https://gitlab.winehq.org/wine/wine/-/merge_requests/7650
Add `IOCTL_WINEBTH_RADIO_START_AUTH`, which gets used to implement `BluetoothAuthenticateDeviceEx`.
--
v11: bluetoothapis/tests: Add tests for BluetoothAuthenticateDeviceEx.
bluetoothapis: Use a wizard GUI to respond to pairing requests if an authentication callback is not registered.
https://gitlab.winehq.org/wine/wine/-/merge_requests/7885
Add `IOCTL_WINEBTH_RADIO_START_AUTH`, which gets used to implement `BluetoothAuthenticateDeviceEx`.
--
v10: bluetoothapis/tests: Add tests for BluetoothAuthenticateDeviceEx.
bluetoothapis: Use a wizard GUI to respond to pairing requests if an authentication callback is not registered.
bluetoothapis: Implement BluetoothAuthenticateDeviceEx.
https://gitlab.winehq.org/wine/wine/-/merge_requests/7885
On Tue May 27 08:53:30 2025 +0000, Alexandros Frantzis wrote:
> Hi @yurih, the current code excludes VK_MENU/SHIFT/CONTROL, but not in
> order to filter modifier keys, but because these are inferred keys: they
> don't corresponding to a specific physical key and their state is set
> based on the state other keys (i.e., the left/right specific variants).
> > Also, there's issues with extended scan code (for example my keyboard
> arrows) that aren't released, though it also happens with winex11.
> Hmm, I see releases for the key arrows on my keyboard :/ (i.e.,
> VK_LEFT/RIGHT/...), not sure what's different here.
My keyboard is a french azerty keyboard, the down arrow key scan code is e0
50.
--
https://gitlab.winehq.org/wine/wine/-/merge_requests/6199#note_104647
On Sun May 25 15:34:38 2025 +0000, Yuri Hérouard wrote:
> Yes it does indeed fix the alt menu mode without my patch. Though I
> don't think I understood clearly what you meant, as Alt is already
> filtered (VK_MENU), I just added the left and right keys as they are
> among the returned keyboard state and are not filtered, making Alt
> released anyway. You plan to remove the modifier's filtering altogether ?
> Also, there's issues with extended scan code (for example my keyboard
> arrows) that aren't released, though it also happens with winex11.
Hi @yurih, the current code excludes VK_MENU/SHIFT/CONTROL, but not in order to filter modifier keys, but because these are inferred keys: they don't corresponding to a specific physical key and their state is set based on the state other keys (i.e., the left/right specific variants).
> Also, there's issues with extended scan code (for example my keyboard arrows) that aren't released, though it also happens with winex11.
Hmm, I see releases for the key arrows on my keyboard :/ (i.e., VK_LEFT/RIGHT/...), not sure what's different here.
--
https://gitlab.winehq.org/wine/wine/-/merge_requests/6199#note_104643
Add `IOCTL_WINEBTH_RADIO_START_AUTH`, which gets used to implement `BluetoothAuthenticateDeviceEx`.
--
v9: bluetoothapis/tests: Add tests for BluetoothAuthenticateDeviceEx.
bluetoothapis: Use a wizard GUI to respond to pairing requests if an authentication callback is not registered.
https://gitlab.winehq.org/wine/wine/-/merge_requests/7885
2 issues is closed:
- it also fixes spam in logs that maximum value 64 has been exceeded, and (AMD Threadreapers and modern 32 core cpu) have become more accessible
- most software does not use all logical cores by default, and many server boards cannot fully run software
--
https://gitlab.winehq.org/wine/wine/-/merge_requests/8135