Merge "Ensure string is non-empty before calling stoul or stoi" into amd-master

[ROCm/rocm_smi_lib commit: 842bd29568]
Этот коммит содержится в:
Chris Freehill
2020-01-30 20:16:56 -05:00
коммит произвёл Gerrit Code Review
родитель 05db31fdc7 61db4c7e15
Коммит 386bab024e
3 изменённых файлов: 41 добавлений и 1 удалений
+24 -1
Просмотреть файл
@@ -207,7 +207,14 @@ static uint64_t get_multiplier_from_str(char units_char) {
* "<int index>: <int freq><freq. unit string> <|*>"
*/
static uint64_t freq_string_to_int(const std::vector<std::string> &freq_lines,
bool *is_curr, uint32_t lanes[], int i) {
bool *is_curr, uint32_t lanes[], uint32_t i) {
assert(i < freq_lines.size());
if (i >= freq_lines.size()) {
throw amd::smi::rsmi_exception(RSMI_STATUS_INPUT_OUT_OF_BOUNDS,
__FUNCTION__);
}
std::istringstream fs(freq_lines[i]);
uint32_t ind;
@@ -238,6 +245,10 @@ static uint64_t freq_string_to_int(const std::vector<std::string> &freq_lines,
if (star_str[0] == 'x') {
assert(lanes != nullptr && "Lanes are provided but null lanes pointer");
if (lanes) {
if (star_str.substr(1) == "") {
throw amd::smi::rsmi_exception(RSMI_STATUS_NO_DATA, __FUNCTION__);
}
lanes[i] = std::stoi(star_str.substr(1), nullptr);
}
}
@@ -417,6 +428,9 @@ static rsmi_status_t get_dev_mon_value(amd::smi::MonitorTypes type,
return errno_to_rsmi_status(ret);
}
if (val_str == "") {
return RSMI_STATUS_NO_DATA;
}
*val = std::stoi(val_str);
return RSMI_STATUS_SUCCESS;
@@ -445,6 +459,10 @@ static rsmi_status_t get_dev_mon_value(amd::smi::MonitorTypes type,
}
assert(amd::smi::IsInteger(val_str));
if (val_str == "") {
return RSMI_STATUS_NO_DATA;
}
*val = std::stoul(val_str);
return RSMI_STATUS_SUCCESS;
@@ -1400,6 +1418,11 @@ get_id_name_str_from_line(uint64_t id, std::string ln,
THROW_IF_NULLPTR_DEREF(ln_str)
*ln_str >> token1;
if (token1 == "") {
throw amd::smi::rsmi_exception(RSMI_STATUS_NO_DATA, __FUNCTION__);
}
if (std::stoul(token1, nullptr, 16) == id) {
int64_t pos = ln_str->tellg();
+10
Просмотреть файл
@@ -664,6 +664,10 @@ int Device::readDevInfo(DevInfoTypes type, uint64_t *val) {
case kDevErrCntFeatures:
ret = readDevInfoStr(type, &tempStr);
RET_IF_NONZERO(ret);
if (tempStr == "") {
return EINVAL;
}
*val = std::stoi(tempStr, 0, 16);
break;
@@ -681,6 +685,9 @@ int Device::readDevInfo(DevInfoTypes type, uint64_t *val) {
case kDevXGMIError:
ret = readDevInfoStr(type, &tempStr);
RET_IF_NONZERO(ret);
if (tempStr == "") {
return EINVAL;
}
*val = std::stoul(tempStr, 0);
break;
@@ -708,6 +715,9 @@ int Device::readDevInfo(DevInfoTypes type, uint64_t *val) {
case kDevFwVersionVcn:
ret = readDevInfoStr(type, &tempStr);
RET_IF_NONZERO(ret);
if (tempStr == "") {
return EINVAL;
}
*val = std::stoul(tempStr, 0, 16);
break;
+7
Просмотреть файл
@@ -159,6 +159,9 @@ int GetProcessInfo(rsmi_process_info_t *procs, uint32_t num_allocated,
return err;
}
assert(is_number(tmp) && "Unexpected value in pasid file");
if (!is_number(tmp)) {
return EINVAL;
}
procs[*num_procs_found].pasid = std::stoi(tmp);
}
++(*num_procs_found);
@@ -196,6 +199,10 @@ int GetProcessInfoForPID(uint32_t pid, rsmi_process_info_t *proc) {
return err;
}
assert(is_number(tmp) && "Unexpected value in pasid file");
if (!is_number(tmp)) {
return EINVAL;
}
proc->pasid = std::stoi(tmp);
return 0;