1
0
mirror of https://github.com/wine-mirror/wine synced 2024-07-05 17:28:47 +00:00

winecoreaudio: Correctly handle devices whose UID contains non-ASCII characters.

This commit is contained in:
Brendan Shanks 2024-04-05 22:05:52 -07:00 committed by Alexandre Julliard
parent 14a51fa446
commit a630b125ef

View File

@ -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;