]> git.ipfire.org Git - thirdparty/systemd.git/commitdiff
test-parse-util: cover negative numbers, leading spaces, and more range errors 1844/head
authorMartin Pitt <martin.pitt@ubuntu.com>
Wed, 11 Nov 2015 09:05:00 +0000 (10:05 +0100)
committerMartin Pitt <martin.pitt@ubuntu.com>
Wed, 11 Nov 2015 09:09:18 +0000 (10:09 +0100)
Motivated by https://github.com/systemd/systemd/issues/1829 where negative
numbers were mis-handled on 32 bit platforms by safe_atou*().

src/test/test-parse-util.c

index d3ae0599ab45a610845aa435f4a7f9f92f70c2a9..f0d5d71083fbba6cba1f4456593287f6ef7d1ede 100644 (file)
@@ -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);
 }