Skip to content

Commit

Permalink
Browse files Browse the repository at this point in the history
cutils: Allow NULL str in qemu_strtosz
All the other qemu_strto* and parse_uint allow a NULL str.  Having
qemu_strtosz not crash on qemu_strtosz(NULL, NULL, &value) is an easy
fix that adds some consistency between our string parsers.

Signed-off-by: Eric Blake <eblake@redhat.com>
Reviewed-by: Philippe Mathieu-Daudé <philmd@linaro.org>
Reviewed-by: Hanna Czenczek <hreitz@redhat.com>
Message-Id: <20230522190441.64278-13-eblake@redhat.com>
  • Loading branch information
ebblake committed Jun 1, 2023
1 parent 3c9ac70 commit ed4394f
Show file tree
Hide file tree
Showing 2 changed files with 10 additions and 2 deletions.
10 changes: 9 additions & 1 deletion tests/unit/test-cutils.c
Expand Up @@ -3285,7 +3285,12 @@ static void do_strtosz_full(const char *str, qemu_strtosz_fn fn,
ret = fn(str, &endptr, &val);
g_assert_cmpint(ret, ==, exp_ptr_ret);
g_assert_cmpuint(val, ==, exp_ptr_val);
g_assert_true(endptr == str + exp_ptr_offset);
if (str) {
g_assert_true(endptr == str + exp_ptr_offset);
} else {
g_assert_cmpint(exp_ptr_offset, ==, 0);
g_assert_null(endptr);
}

val = 0xbaadf00d;
ret = fn(str, NULL, &val);
Expand Down Expand Up @@ -3383,6 +3388,9 @@ static void test_qemu_strtosz_float(void)

static void test_qemu_strtosz_invalid(void)
{
do_strtosz(NULL, -EINVAL, 0xbaadf00d, 0);

/* Must parse at least one digit */
do_strtosz("", -EINVAL, 0xbaadf00d, 0);
do_strtosz(" \t ", -EINVAL, 0xbaadf00d, 0);
do_strtosz("crap", -EINVAL, 0xbaadf00d, 0);
Expand Down
2 changes: 1 addition & 1 deletion util/cutils.c
Expand Up @@ -306,7 +306,7 @@ static int do_strtosz(const char *nptr, const char **end,
out:
if (end) {
*end = endptr;
} else if (*endptr) {
} else if (nptr && *endptr) {
retval = -EINVAL;
}
if (retval == 0) {
Expand Down

0 comments on commit ed4394f

Please sign in to comment.