test-parse-util: cover negative numbers, leading spaces, and more range errors
Motivated by https://github.com/systemd/systemd/issues/1829 where negative numbers were mis-handled on 32 bit platforms by safe_atou*().
This commit is contained in:
@@ -352,6 +352,24 @@ static void test_safe_atolli(void) {
|
||||
assert_se(r == 0);
|
||||
assert_se(l == 12345);
|
||||
|
||||
r = safe_atolli(" 12345", &l);
|
||||
assert_se(r == 0);
|
||||
assert_se(l == 12345);
|
||||
|
||||
r = safe_atolli("-12345", &l);
|
||||
assert_se(r == 0);
|
||||
assert_se(l == -12345);
|
||||
|
||||
r = safe_atolli(" -12345", &l);
|
||||
assert_se(r == 0);
|
||||
assert_se(l == -12345);
|
||||
|
||||
r = safe_atolli("12345678901234567890", &l);
|
||||
assert_se(r == -ERANGE);
|
||||
|
||||
r = safe_atolli("-12345678901234567890", &l);
|
||||
assert_se(r == -ERANGE);
|
||||
|
||||
r = safe_atolli("junk", &l);
|
||||
assert_se(r == -EINVAL);
|
||||
}
|
||||
@@ -364,9 +382,19 @@ static void test_safe_atou16(void) {
|
||||
assert_se(r == 0);
|
||||
assert_se(l == 12345);
|
||||
|
||||
r = safe_atou16(" 12345", &l);
|
||||
assert_se(r == 0);
|
||||
assert_se(l == 12345);
|
||||
|
||||
r = safe_atou16("123456", &l);
|
||||
assert_se(r == -ERANGE);
|
||||
|
||||
r = safe_atou16("-1", &l);
|
||||
assert_se(r == -ERANGE);
|
||||
|
||||
r = safe_atou16(" -1", &l);
|
||||
assert_se(r == -ERANGE);
|
||||
|
||||
r = safe_atou16("junk", &l);
|
||||
assert_se(r == -EINVAL);
|
||||
}
|
||||
@@ -379,9 +407,24 @@ static void test_safe_atoi16(void) {
|
||||
assert_se(r == 0);
|
||||
assert_se(l == -12345);
|
||||
|
||||
r = safe_atoi16(" -12345", &l);
|
||||
assert_se(r == 0);
|
||||
assert_se(l == -12345);
|
||||
|
||||
r = safe_atoi16("32767", &l);
|
||||
assert_se(r == 0);
|
||||
assert_se(l == 32767);
|
||||
|
||||
r = safe_atoi16(" 32767", &l);
|
||||
assert_se(r == 0);
|
||||
assert_se(l == 32767);
|
||||
|
||||
r = safe_atoi16("36536", &l);
|
||||
assert_se(r == -ERANGE);
|
||||
|
||||
r = safe_atoi16("-32769", &l);
|
||||
assert_se(r == -ERANGE);
|
||||
|
||||
r = safe_atoi16("junk", &l);
|
||||
assert_se(r == -EINVAL);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user