aboutsummaryrefslogtreecommitdiff
path: root/tests/unit
diff options
context:
space:
mode:
authorEric Blake <eblake@redhat.com>2023-05-22 14:04:30 -0500
committerEric Blake <eblake@redhat.com>2023-06-02 12:29:27 -0500
commit52d606aa5b6859bf13b026aa82f53f8506aa6abe (patch)
tree16c667259935fca2fb4d9b3c58567f6b7f9435f7 /tests/unit
parentbd1386cce1b184e4260721858d3bb4b4c888b5f0 (diff)
cutils: Allow NULL endptr in parse_uint()
All the qemu_strto*() functions permit a NULL endptr, just like their libc counterparts, leaving parse_uint() as the oddball that caused SEGFAULT on NULL and required the user to call parse_uint_full() instead. Relax things for consistency, even though the testsuite is the only impacted caller. Add one more unit test to ensure even parse_uint_full(NULL, 0, &value) works. This also fixes our code to uniformly favor EINVAL over ERANGE when both apply. Also fixes a doc mismatch @v vs. a parameter named value. Signed-off-by: Eric Blake <eblake@redhat.com> Reviewed-by: Hanna Czenczek <hreitz@redhat.com> Message-Id: <20230522190441.64278-9-eblake@redhat.com>
Diffstat (limited to 'tests/unit')
-rw-r--r--tests/unit/test-cutils.c18
1 files changed, 16 insertions, 2 deletions
diff --git a/tests/unit/test-cutils.c b/tests/unit/test-cutils.c
index 3664b4fffc..cd8fe7d940 100644
--- a/tests/unit/test-cutils.c
+++ b/tests/unit/test-cutils.c
@@ -270,14 +270,26 @@ static void test_parse_uint_full_correct(void)
static void test_parse_uint_full_erange_junk(void)
{
- /* FIXME - inconsistent with qemu_strto* which favors EINVAL */
+ /* EINVAL has priority over ERANGE */
uint64_t i = 999;
const char *str = "-2junk";
int r;
r = parse_uint_full(str, 0, &i);
- g_assert_cmpint(r, ==, -ERANGE /* FIXME -EINVAL */);
+ g_assert_cmpint(r, ==, -EINVAL);
+ g_assert_cmpuint(i, ==, 0);
+}
+
+static void test_parse_uint_full_null(void)
+{
+ uint64_t i = 999;
+ const char *str = NULL;
+ int r;
+
+ r = parse_uint_full(str, 0, &i);
+
+ g_assert_cmpint(r, ==, -EINVAL);
g_assert_cmpuint(i, ==, 0);
}
@@ -3328,6 +3340,8 @@ int main(int argc, char **argv)
test_parse_uint_full_correct);
g_test_add_func("/cutils/parse_uint_full/erange_junk",
test_parse_uint_full_erange_junk);
+ g_test_add_func("/cutils/parse_uint_full/null",
+ test_parse_uint_full_null);
/* qemu_strtoi() tests */
g_test_add_func("/cutils/qemu_strtoi/correct",