mirror of
https://github.com/Kitware/CMake.git
synced 2026-01-07 14:20:06 -06: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;
|
||||
char* endp;
|
||||
while (isspace(*str)) {
|
||||
++str;
|
||||
}
|
||||
if (*str == '-') {
|
||||
return false;
|
||||
}
|
||||
*value = strtoul(str, &endp, 10);
|
||||
return (*endp == '\0') && (endp != str) && (errno == 0);
|
||||
}
|
||||
|
||||
@@ -93,5 +93,22 @@ int testSystemTools(int /*unused*/, char* /*unused*/ [])
|
||||
if (!failed) {
|
||||
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;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user