Module: wine Branch: master Commit: a630b125ef4429c1c52c1272eba8b7939e7e6857 URL: https://gitlab.winehq.org/wine/wine/-/commit/a630b125ef4429c1c52c1272eba8b79...
Author: Brendan Shanks bshanks@codeweavers.com Date: Fri Apr 5 22:05:52 2024 -0700
winecoreaudio: Correctly handle devices whose UID contains non-ASCII characters.
---
dlls/winecoreaudio.drv/coreaudio.c | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-)
diff --git a/dlls/winecoreaudio.drv/coreaudio.c b/dlls/winecoreaudio.drv/coreaudio.c index d78744455a8..a79a0d16839 100644 --- a/dlls/winecoreaudio.drv/coreaudio.c +++ b/dlls/winecoreaudio.drv/coreaudio.c @@ -325,7 +325,12 @@ static NTSTATUS unix_get_endpoint_ids(void *args)
for(i = 0; i < params->num; i++){ const SIZE_T name_len = CFStringGetLength(info[i].name) + 1; - const SIZE_T device_len = CFStringGetLength(info[i].uid) + 1; + CFIndex device_len; + + CFStringGetBytes(info[i].uid, CFRangeMake(0, CFStringGetLength(info[i].uid)), kCFStringEncodingUTF8, + 0, false, NULL, 0, &device_len); + device_len++; /* for null terminator */ + needed += name_len * sizeof(WCHAR) + ((device_len + 1) & ~1);
if(needed <= params->size){ @@ -336,7 +341,8 @@ static NTSTATUS unix_get_endpoint_ids(void *args) offset += name_len * sizeof(WCHAR);
endpoint->device = offset; - CFStringGetCString(info[i].uid, (char *)params->endpoints + offset, params->size - offset, kCFStringEncodingUTF8); + CFStringGetBytes(info[i].uid, CFRangeMake(0, CFStringGetLength(info[i].uid)), kCFStringEncodingUTF8, + 0, false, (UInt8 *)params->endpoints + offset, params->size - offset, NULL); ((char *)params->endpoints)[offset + device_len - 1] = '\0'; offset += (device_len + 1) & ~1;