[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[PATCH v2 17/19] cutils: Use parse_uint in qemu_strtosz for negative rej
|
From: |
Eric Blake |
|
Subject: |
[PATCH v2 17/19] cutils: Use parse_uint in qemu_strtosz for negative rejection |
|
Date: |
Thu, 11 May 2023 21:10:31 -0500 |
Rather than open-coding two different ways to check for an unwanted
negative sign, reuse the same code in both functions. That way, if we
decide down the road to accept "-0" instead of rejecting it, we have
fewer places to change. Also, it means we now get ERANGE instead of
EINVAL for negative values in qemu_strtosz, which is reasonable for
what it represents.
Signed-off-by: Eric Blake <eblake@redhat.com>
---
tests/unit/test-cutils.c | 7 +++----
util/cutils.c | 8 ++------
2 files changed, 5 insertions(+), 10 deletions(-)
diff --git a/tests/unit/test-cutils.c b/tests/unit/test-cutils.c
index 1272638582a..b8ad4d7fbac 100644
--- a/tests/unit/test-cutils.c
+++ b/tests/unit/test-cutils.c
@@ -3396,10 +3396,9 @@ static void test_qemu_strtosz_trailing(void)
static void test_qemu_strtosz_erange(void)
{
/* FIXME negative values fit better as ERANGE */
- do_strtosz(" -0", -EINVAL /* FIXME -ERANGE */, 0, 0 /* FIXME 3 */);
- do_strtosz("-1", -EINVAL /* FIXME -ERANGE */, 0, 0 /* FIXME 2 */);
- do_strtosz_full("-2M", qemu_strtosz, -EINVAL /* FIXME -ERANGE */, 0,
- 0 /* FIXME 2 */, -EINVAL, 0);
+ do_strtosz(" -0", -ERANGE, 0, 3);
+ do_strtosz("-1", -ERANGE, 0, 2);
+ do_strtosz_full("-2M", qemu_strtosz, -ERANGE, 0, 2, -EINVAL, 0);
do_strtosz(" -.0", -EINVAL /* FIXME -ERANGE */, 0, 0 /* FIXME 4 */);
do_strtosz_full("-.1k", qemu_strtosz, -EINVAL /* FIXME -ERANGE */, 0,
0 /* FIXME 3 */, -EINVAL, 0);
diff --git a/util/cutils.c b/util/cutils.c
index b5a6641fa0f..550abbe5c06 100644
--- a/util/cutils.c
+++ b/util/cutils.c
@@ -201,6 +201,7 @@ static int64_t suffix_mul(char suffix, int64_t unit)
* - hex with scaling suffix, such as 0x20M
* - octal, such as 08
* - fractional hex, such as 0x1.8
+ * - negative values, including -0
* - floating point exponents, such as 1e3
*
* The end pointer will be returned in *end, if not NULL. If there is
@@ -226,15 +227,10 @@ static int do_strtosz(const char *nptr, const char **end,
int64_t mul;
/* Parse integral portion as decimal. */
- retval = qemu_strtou64(nptr, &endptr, 10, &val);
+ retval = parse_uint(nptr, &endptr, 10, &val);
if (retval) {
goto out;
}
- if (memchr(nptr, '-', endptr - nptr) != NULL) {
- endptr = nptr;
- retval = -EINVAL;
- goto out;
- }
if (val == 0 && (*endptr == 'x' || *endptr == 'X')) {
/* Input looks like hex; reparse, and insist on no fraction or suffix.
*/
retval = qemu_strtou64(nptr, &endptr, 16, &val);
--
2.40.1
- [PATCH v2 16/19] cutils: Set value in all integral qemu_strto* error paths, (continued)
- [PATCH v2 16/19] cutils: Set value in all integral qemu_strto* error paths, Eric Blake, 2023/05/11
- [PATCH v2 15/19] cutils: Set value in all qemu_strtosz* error paths, Eric Blake, 2023/05/11
- [PATCH v2 06/19] cutils: Document differences between parse_uint and qemu_strtou64, Eric Blake, 2023/05/11
- [PATCH v2 13/19] numa: Check for qemu_strtosz_MiB error, Eric Blake, 2023/05/11
- [PATCH v2 18/19] cutils: Improve qemu_strtod* error paths, Eric Blake, 2023/05/11
- [PATCH v2 19/19] cutils: Improve qemu_strtosz handling of fractions, Eric Blake, 2023/05/11
- [PATCH v2 17/19] cutils: Use parse_uint in qemu_strtosz for negative rejection,
Eric Blake <=
- Re: [PATCH v2 00/19] Fix qemu_strtosz() read-out-of-bounds, Eric Blake, 2023/05/12