Commit 6bc8e9a1 authored by Christopher Berner's avatar Christopher Berner Committed by Alexandre Julliard

setupapi: Fix buffer size in SetupDiGetDeviceInterfaceDetailW.

parent 1bdd2ab6
......@@ -2971,7 +2971,7 @@ BOOL WINAPI SetupDiGetDeviceInterfaceDetailW(
}
info = (struct InterfaceInfo *)DeviceInterfaceData->Reserved;
if (info->symbolicLink)
bytesNeeded += lstrlenW(info->symbolicLink);
bytesNeeded += sizeof(WCHAR)*lstrlenW(info->symbolicLink);
if (DeviceInterfaceDetailDataSize >= bytesNeeded)
{
if (info->symbolicLink)
......
......@@ -627,6 +627,7 @@ static void testGetDeviceInterfaceDetail(void)
LPBYTE buf = HeapAlloc(GetProcessHeap(), 0, size);
SP_DEVICE_INTERFACE_DETAIL_DATA_A *detail =
(SP_DEVICE_INTERFACE_DETAIL_DATA_A *)buf;
DWORD expectedsize = offsetof(SP_DEVICE_INTERFACE_DETAIL_DATA_W, DevicePath) + sizeof(WCHAR)*(1 + strlen(path));
detail->cbSize = 0;
SetLastError(0xdeadbeef);
......@@ -656,6 +657,10 @@ static void testGetDeviceInterfaceDetail(void)
GetLastError());
ok(!lstrcmpiA(path, detail->DevicePath), "Unexpected path %s\n",
detail->DevicePath);
/* Check SetupDiGetDeviceInterfaceDetailW */
ret = SetupDiGetDeviceInterfaceDetailW(set, &interfaceData, NULL, 0, &size, NULL);
ok(!ret && GetLastError() == ERROR_INSUFFICIENT_BUFFER, "Expected ERROR_INSUFFICIENT_BUFFER, got error code: %d\n", GetLastError());
ok(expectedsize == size, "SetupDiGetDeviceInterfaceDetailW returned wrong reqsize: expected %d, got %d\n", expectedsize, size);
HeapFree(GetProcessHeap(), 0, buf);
}
pSetupDiDestroyDeviceInfoList(set);
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment