Merge pull request #16033 from poettering/parse-int-fixlets
various fixes and tweaks for integer parsing
This commit is contained in:
@@ -75,14 +75,22 @@ static void test_parse_mode(void) {
|
||||
mode_t m;
|
||||
|
||||
assert_se(parse_mode("-1", &m) < 0);
|
||||
assert_se(parse_mode("+1", &m) < 0);
|
||||
assert_se(parse_mode("", &m) < 0);
|
||||
assert_se(parse_mode("888", &m) < 0);
|
||||
assert_se(parse_mode("77777", &m) < 0);
|
||||
|
||||
assert_se(parse_mode("544", &m) >= 0 && m == 0544);
|
||||
assert_se(parse_mode("0544", &m) >= 0 && m == 0544);
|
||||
assert_se(parse_mode("00544", &m) >= 0 && m == 0544);
|
||||
assert_se(parse_mode("777", &m) >= 0 && m == 0777);
|
||||
assert_se(parse_mode("0777", &m) >= 0 && m == 0777);
|
||||
assert_se(parse_mode("00777", &m) >= 0 && m == 0777);
|
||||
assert_se(parse_mode("7777", &m) >= 0 && m == 07777);
|
||||
assert_se(parse_mode("07777", &m) >= 0 && m == 07777);
|
||||
assert_se(parse_mode("007777", &m) >= 0 && m == 07777);
|
||||
assert_se(parse_mode("0", &m) >= 0 && m == 0);
|
||||
assert_se(parse_mode(" 1", &m) >= 0 && m == 1);
|
||||
}
|
||||
|
||||
static void test_parse_size(void) {
|
||||
@@ -358,6 +366,18 @@ static void test_safe_atolli(void) {
|
||||
assert_se(r == 0);
|
||||
assert_se(l == -12345);
|
||||
|
||||
r = safe_atolli("0x5", &l);
|
||||
assert_se(r == 0);
|
||||
assert_se(l == 5);
|
||||
|
||||
r = safe_atolli("0o6", &l);
|
||||
assert_se(r == 0);
|
||||
assert_se(l == 6);
|
||||
|
||||
r = safe_atolli("0B101", &l);
|
||||
assert_se(r == 0);
|
||||
assert_se(l == 5);
|
||||
|
||||
r = safe_atolli("12345678901234567890", &l);
|
||||
assert_se(r == -ERANGE);
|
||||
|
||||
@@ -431,6 +451,14 @@ static void test_safe_atoi16(void) {
|
||||
assert_se(r == 0);
|
||||
assert_se(l == 32767);
|
||||
|
||||
r = safe_atoi16("0o11", &l);
|
||||
assert_se(r == 0);
|
||||
assert_se(l == 9);
|
||||
|
||||
r = safe_atoi16("0B110", &l);
|
||||
assert_se(r == 0);
|
||||
assert_se(l == 6);
|
||||
|
||||
r = safe_atoi16("36536", &l);
|
||||
assert_se(r == -ERANGE);
|
||||
|
||||
@@ -475,6 +503,13 @@ static void test_safe_atoux16(void) {
|
||||
r = safe_atoux16(" -1", &l);
|
||||
assert_se(r == -ERANGE);
|
||||
|
||||
r = safe_atoux16("0b1", &l);
|
||||
assert_se(r == 0);
|
||||
assert_se(l == 177);
|
||||
|
||||
r = safe_atoux16("0o70", &l);
|
||||
assert_se(r == -EINVAL);
|
||||
|
||||
r = safe_atoux16("junk", &l);
|
||||
assert_se(r == -EINVAL);
|
||||
|
||||
@@ -500,6 +535,14 @@ static void test_safe_atou64(void) {
|
||||
assert_se(r == 0);
|
||||
assert_se(l == 12345);
|
||||
|
||||
r = safe_atou64("0o11", &l);
|
||||
assert_se(r == 0);
|
||||
assert_se(l == 9);
|
||||
|
||||
r = safe_atou64("0b11", &l);
|
||||
assert_se(r == 0);
|
||||
assert_se(l == 3);
|
||||
|
||||
r = safe_atou64("18446744073709551617", &l);
|
||||
assert_se(r == -ERANGE);
|
||||
|
||||
@@ -542,6 +585,14 @@ static void test_safe_atoi64(void) {
|
||||
assert_se(r == 0);
|
||||
assert_se(l == 32767);
|
||||
|
||||
r = safe_atoi64(" 0o20", &l);
|
||||
assert_se(r == 0);
|
||||
assert_se(l == 16);
|
||||
|
||||
r = safe_atoi64(" 0b01010", &l);
|
||||
assert_se(r == 0);
|
||||
assert_se(l == 10);
|
||||
|
||||
r = safe_atoi64("9223372036854775813", &l);
|
||||
assert_se(r == -ERANGE);
|
||||
|
||||
@@ -577,6 +628,13 @@ static void test_safe_atoux64(void) {
|
||||
assert_se(r == 0);
|
||||
assert_se(l == 0x12345);
|
||||
|
||||
r = safe_atoux64("0b11011", &l);
|
||||
assert_se(r == 0);
|
||||
assert_se(l == 11603985);
|
||||
|
||||
r = safe_atoux64("0o11011", &l);
|
||||
assert_se(r == -EINVAL);
|
||||
|
||||
r = safe_atoux64("18446744073709551617", &l);
|
||||
assert_se(r == -ERANGE);
|
||||
|
||||
|
||||
@@ -42,6 +42,22 @@ static void test_parse_uid(void) {
|
||||
|
||||
log_info("/* %s */", __func__);
|
||||
|
||||
r = parse_uid("0", &uid);
|
||||
assert_se(r == 0);
|
||||
assert_se(uid == 0);
|
||||
|
||||
r = parse_uid("1", &uid);
|
||||
assert_se(r == 0);
|
||||
assert_se(uid == 1);
|
||||
|
||||
r = parse_uid("01", &uid);
|
||||
assert_se(r == -EINVAL);
|
||||
assert_se(uid == 1);
|
||||
|
||||
r = parse_uid("001", &uid);
|
||||
assert_se(r == -EINVAL);
|
||||
assert_se(uid == 1);
|
||||
|
||||
r = parse_uid("100", &uid);
|
||||
assert_se(r == 0);
|
||||
assert_se(uid == 100);
|
||||
@@ -54,13 +70,57 @@ static void test_parse_uid(void) {
|
||||
assert_se(r == -EINVAL);
|
||||
assert_se(uid == 100);
|
||||
|
||||
r = parse_uid("0o1234", &uid);
|
||||
assert_se(r == -EINVAL);
|
||||
assert_se(uid == 100);
|
||||
|
||||
r = parse_uid("0b1234", &uid);
|
||||
assert_se(r == -EINVAL);
|
||||
assert_se(uid == 100);
|
||||
|
||||
r = parse_uid("+1234", &uid);
|
||||
assert_se(r == -EINVAL);
|
||||
assert_se(uid == 100);
|
||||
|
||||
r = parse_uid("-1234", &uid);
|
||||
assert_se(r == -EINVAL);
|
||||
assert_se(uid == 100);
|
||||
|
||||
r = parse_uid(" 1234", &uid);
|
||||
assert_se(r == -EINVAL);
|
||||
assert_se(uid == 100);
|
||||
|
||||
r = parse_uid("01234", &uid);
|
||||
assert_se(r == 0);
|
||||
assert_se(uid == 1234);
|
||||
assert_se(r == -EINVAL);
|
||||
assert_se(uid == 100);
|
||||
|
||||
r = parse_uid("001234", &uid);
|
||||
assert_se(r == -EINVAL);
|
||||
assert_se(uid == 100);
|
||||
|
||||
r = parse_uid("0001234", &uid);
|
||||
assert_se(r == -EINVAL);
|
||||
assert_se(uid == 100);
|
||||
|
||||
r = parse_uid("-0", &uid);
|
||||
assert_se(r == -EINVAL);
|
||||
assert_se(uid == 100);
|
||||
|
||||
r = parse_uid("+0", &uid);
|
||||
assert_se(r == -EINVAL);
|
||||
assert_se(uid == 100);
|
||||
|
||||
r = parse_uid("00", &uid);
|
||||
assert_se(r == -EINVAL);
|
||||
assert_se(uid == 100);
|
||||
|
||||
r = parse_uid("000", &uid);
|
||||
assert_se(r == -EINVAL);
|
||||
assert_se(uid == 100);
|
||||
|
||||
r = parse_uid("asdsdas", &uid);
|
||||
assert_se(r == -EINVAL);
|
||||
assert_se(uid == 1234);
|
||||
assert_se(uid == 100);
|
||||
}
|
||||
|
||||
static void test_uid_ptr(void) {
|
||||
@@ -359,6 +419,39 @@ static void test_gid_lists_ops(void) {
|
||||
assert_se(gids);
|
||||
}
|
||||
|
||||
static void test_parse_uid_range(void) {
|
||||
uid_t a = 4711, b = 4711;
|
||||
|
||||
log_info("/* %s */", __func__);
|
||||
|
||||
assert_se(parse_uid_range("", &a, &b) == -EINVAL && a == 4711 && b == 4711);
|
||||
assert_se(parse_uid_range(" ", &a, &b) == -EINVAL && a == 4711 && b == 4711);
|
||||
assert_se(parse_uid_range("x", &a, &b) == -EINVAL && a == 4711 && b == 4711);
|
||||
|
||||
assert_se(parse_uid_range("0", &a, &b) >= 0 && a == 0 && b == 0);
|
||||
assert_se(parse_uid_range("1", &a, &b) >= 0 && a == 1 && b == 1);
|
||||
assert_se(parse_uid_range("2-2", &a, &b) >= 0 && a == 2 && b == 2);
|
||||
assert_se(parse_uid_range("3-3", &a, &b) >= 0 && a == 3 && b == 3);
|
||||
assert_se(parse_uid_range("4-5", &a, &b) >= 0 && a == 4 && b == 5);
|
||||
|
||||
assert_se(parse_uid_range("7-6", &a, &b) == -EINVAL && a == 4 && b == 5);
|
||||
assert_se(parse_uid_range("-1", &a, &b) == -EINVAL && a == 4 && b == 5);
|
||||
assert_se(parse_uid_range("01", &a, &b) == -EINVAL && a == 4 && b == 5);
|
||||
assert_se(parse_uid_range("001", &a, &b) == -EINVAL && a == 4 && b == 5);
|
||||
assert_se(parse_uid_range("+1", &a, &b) == -EINVAL && a == 4 && b == 5);
|
||||
assert_se(parse_uid_range("1--1", &a, &b) == -EINVAL && a == 4 && b == 5);
|
||||
assert_se(parse_uid_range(" 1", &a, &b) == -EINVAL && a == 4 && b == 5);
|
||||
assert_se(parse_uid_range(" 1-2", &a, &b) == -EINVAL && a == 4 && b == 5);
|
||||
assert_se(parse_uid_range("1 -2", &a, &b) == -EINVAL && a == 4 && b == 5);
|
||||
assert_se(parse_uid_range("1- 2", &a, &b) == -EINVAL && a == 4 && b == 5);
|
||||
assert_se(parse_uid_range("1-2 ", &a, &b) == -EINVAL && a == 4 && b == 5);
|
||||
assert_se(parse_uid_range("01-2", &a, &b) == -EINVAL && a == 4 && b == 5);
|
||||
assert_se(parse_uid_range("1-02", &a, &b) == -EINVAL && a == 4 && b == 5);
|
||||
assert_se(parse_uid_range("001-2", &a, &b) == -EINVAL && a == 4 && b == 5);
|
||||
assert_se(parse_uid_range("1-002", &a, &b) == -EINVAL && a == 4 && b == 5);
|
||||
assert_se(parse_uid_range(" 01", &a, &b) == -EINVAL && a == 4 && b == 5);
|
||||
}
|
||||
|
||||
int main(int argc, char *argv[]) {
|
||||
test_uid_to_name_one(0, "root");
|
||||
test_uid_to_name_one(UID_NOBODY, NOBODY_USER_NAME);
|
||||
@@ -396,5 +489,7 @@ int main(int argc, char *argv[]) {
|
||||
test_in_gid();
|
||||
test_gid_lists_ops();
|
||||
|
||||
test_parse_uid_range();
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user