mirror of
https://github.com/Kitware/CMake.git
synced 2026-05-03 12:49:50 -05:00
cmSystemTools: Fix StringToULong to reject negative numbers
Fixes: #19161
This commit is contained in:
@@ -3023,6 +3023,12 @@ bool cmSystemTools::StringToULong(const char* str, unsigned long* value)
|
|||||||
{
|
{
|
||||||
errno = 0;
|
errno = 0;
|
||||||
char* endp;
|
char* endp;
|
||||||
|
while (isspace(*str)) {
|
||||||
|
++str;
|
||||||
|
}
|
||||||
|
if (*str == '-') {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
*value = strtoul(str, &endp, 10);
|
*value = strtoul(str, &endp, 10);
|
||||||
return (*endp == '\0') && (endp != str) && (errno == 0);
|
return (*endp == '\0') && (endp != str) && (errno == 0);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -93,5 +93,22 @@ int testSystemTools(int /*unused*/, char* /*unused*/ [])
|
|||||||
if (!failed) {
|
if (!failed) {
|
||||||
cmPassed("cmSystemTools::strverscmp working");
|
cmPassed("cmSystemTools::strverscmp working");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// ----------------------------------------------------------------------
|
||||||
|
// Test cmSystemTools::StringToULong
|
||||||
|
{
|
||||||
|
unsigned long value;
|
||||||
|
cmAssert(cmSystemTools::StringToULong("1", &value) && value == 1,
|
||||||
|
"StringToULong parses a decimal integer.");
|
||||||
|
cmAssert(cmSystemTools::StringToULong(" 1", &value) && value == 1,
|
||||||
|
"StringToULong parses a decimal integer after whitespace.");
|
||||||
|
cmAssert(!cmSystemTools::StringToULong("-1", &value),
|
||||||
|
"StringToULong rejects a negative number.");
|
||||||
|
cmAssert(!cmSystemTools::StringToULong(" -1", &value),
|
||||||
|
"StringToULong rejects a negative number after whitespace.");
|
||||||
|
cmAssert(!cmSystemTools::StringToULong("1x", &value),
|
||||||
|
"StringToULong rejects trailing content.");
|
||||||
|
}
|
||||||
|
|
||||||
return failed;
|
return failed;
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user