mirror of
https://github.com/cmclark00/retro-imager.git
synced 2025-05-19 00:15:21 +01:00
drivelist: let GetEnumeratorName() return std::string instead of char *
Returning a pointer to a character array on the stack that is no longer reserved after the function returns can lead to undefined behavior.
This commit is contained in:
parent
8e87933320
commit
7c1c111699
1 changed files with 8 additions and 8 deletions
16
dependencies/drivelist/src/windows/list.cpp
vendored
16
dependencies/drivelist/src/windows/list.cpp
vendored
|
@ -69,7 +69,7 @@ std::string WCharToUtf8String(const wchar_t* wstr) {
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
char* GetEnumeratorName(HDEVINFO hDeviceInfo, SP_DEVINFO_DATA deviceInfoData) {
|
std::string GetEnumeratorName(HDEVINFO hDeviceInfo, SP_DEVINFO_DATA deviceInfoData) {
|
||||||
char buffer[MAX_PATH];
|
char buffer[MAX_PATH];
|
||||||
|
|
||||||
ZeroMemory(&buffer, sizeof(buffer));
|
ZeroMemory(&buffer, sizeof(buffer));
|
||||||
|
@ -83,7 +83,7 @@ char* GetEnumeratorName(HDEVINFO hDeviceInfo, SP_DEVINFO_DATA deviceInfoData) {
|
||||||
hasEnumeratorName = SetupDiGetDevicePropertyW(hDeviceInfo, &deviceInfoData, &DEVPKEY_Device_EnumeratorName, NULL, (LPBYTE) buffer, sizeof(buffer), NULL, 0);
|
hasEnumeratorName = SetupDiGetDevicePropertyW(hDeviceInfo, &deviceInfoData, &DEVPKEY_Device_EnumeratorName, NULL, (LPBYTE) buffer, sizeof(buffer), NULL, 0);
|
||||||
}*/
|
}*/
|
||||||
|
|
||||||
return hasEnumeratorName ? buffer : NULL;
|
return hasEnumeratorName ? std::string(buffer) : std::string();
|
||||||
}
|
}
|
||||||
|
|
||||||
std::string GetFriendlyName(HDEVINFO hDeviceInfo,
|
std::string GetFriendlyName(HDEVINFO hDeviceInfo,
|
||||||
|
@ -619,7 +619,7 @@ std::vector<DeviceDescriptor> ListStorageDevices() {
|
||||||
std::vector<DeviceDescriptor> deviceList;
|
std::vector<DeviceDescriptor> deviceList;
|
||||||
|
|
||||||
DWORD i;
|
DWORD i;
|
||||||
char *enumeratorName;
|
std::string enumeratorName;
|
||||||
DeviceDescriptor device;
|
DeviceDescriptor device;
|
||||||
|
|
||||||
hDeviceInfo = SetupDiGetClassDevsA(
|
hDeviceInfo = SetupDiGetClassDevsA(
|
||||||
|
@ -636,21 +636,21 @@ std::vector<DeviceDescriptor> ListStorageDevices() {
|
||||||
for (i = 0; SetupDiEnumDeviceInfo(hDeviceInfo, i, &deviceInfoData); i++) {
|
for (i = 0; SetupDiEnumDeviceInfo(hDeviceInfo, i, &deviceInfoData); i++) {
|
||||||
enumeratorName = GetEnumeratorName(hDeviceInfo, deviceInfoData);
|
enumeratorName = GetEnumeratorName(hDeviceInfo, deviceInfoData);
|
||||||
|
|
||||||
printf("[INFO] Enumerating %s\n", enumeratorName);
|
printf("[INFO] Enumerating %s\n", enumeratorName.c_str());
|
||||||
|
|
||||||
// If it failed to get the SPDRP_ENUMERATOR_NAME, skip it
|
// If it failed to get the SPDRP_ENUMERATOR_NAME, skip it
|
||||||
//if (enumeratorName == NULL) {
|
//if (enumeratorName.empty()) {
|
||||||
// continue;
|
// continue;
|
||||||
//}
|
//}
|
||||||
|
|
||||||
device = DeviceDescriptor();
|
device = DeviceDescriptor();
|
||||||
|
|
||||||
device.enumerator = enumeratorName ? std::string(enumeratorName) : "";
|
device.enumerator = enumeratorName;
|
||||||
device.description = GetFriendlyName(hDeviceInfo, deviceInfoData);
|
device.description = GetFriendlyName(hDeviceInfo, deviceInfoData);
|
||||||
device.isRemovable = IsRemovableDevice(hDeviceInfo, deviceInfoData);
|
device.isRemovable = IsRemovableDevice(hDeviceInfo, deviceInfoData);
|
||||||
device.isVirtual = IsVirtualHardDrive(hDeviceInfo, deviceInfoData);
|
device.isVirtual = IsVirtualHardDrive(hDeviceInfo, deviceInfoData);
|
||||||
device.isSCSI = enumeratorName ? IsSCSIDevice(enumeratorName) : false;
|
device.isSCSI = IsSCSIDevice(enumeratorName);
|
||||||
device.isUSB = enumeratorName ? IsUSBDevice(enumeratorName) : false;
|
device.isUSB = IsUSBDevice(enumeratorName);
|
||||||
device.isCard = device.enumerator == "SD";
|
device.isCard = device.enumerator == "SD";
|
||||||
device.isSystem = !device.isRemovable &&
|
device.isSystem = !device.isRemovable &&
|
||||||
(device.enumerator == "SCSI" || device.enumerator == "IDE");
|
(device.enumerator == "SCSI" || device.enumerator == "IDE");
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue