Connor McAdams (@cmcadams) commented about dlls/setupapi/devinst.c:
+{ + DWORD ret = ERROR_SUCCESS; + + if (!prop_key) + return ERROR_INVALID_DATA; + if (!prop_type || (!buf && buf_size)) + return ERROR_INVALID_USER_BUFFER; + if (flags) + return ERROR_INVALID_FLAGS; + + if (IsEqualGUID( &prop_key->fmtid, &DEVPKEY_Device_DeviceDesc.fmtid )) + { + DWORD reg_prop = prop_key->pid - 2, size, type; + + if (prop_key->pid < 2 || reg_prop >= ARRAY_SIZE(PropertyMap) || !PropertyMap[reg_prop].devPropType) + return get_device_reg_property( device->key, prop_key, prop_type, buf, buf_size, req_size, flags );
if (IsEqualGUID( &prop_key->fmtid, &DEVPKEY_Device_DeviceDesc.fmtid ) && prop_key->pid >= 2)
{
DWORD reg_prop = prop_key->pid - 2, size, type;
if (reg_prop >= ARRAY_SIZE(PropertyMap) || !PropertyMap[reg_prop].devPropType)
return get_device_reg_property( device->key, prop_key, prop_type, buf, buf_size, req_size, flags );
Moving the `prop_key->pid` check above makes this cleaner IMO. -- https://gitlab.winehq.org/wine/wine/-/merge_requests/8515#note_109605