[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-devel] [PATCH v2 13/24] test-cutils: Cover qemu_strtosz() around r
From: |
Markus Armbruster |
Subject: |
[Qemu-devel] [PATCH v2 13/24] test-cutils: Cover qemu_strtosz() around range limits |
Date: |
Tue, 21 Feb 2017 21:13:57 +0100 |
Signed-off-by: Markus Armbruster <address@hidden>
Reviewed-by: Eric Blake <address@hidden>
---
tests/test-cutils.c | 61 +++++++++++++++++++++++++++++++++++++++++++++++++++--
1 file changed, 59 insertions(+), 2 deletions(-)
diff --git a/tests/test-cutils.c b/tests/test-cutils.c
index 1773f15..df6c330 100644
--- a/tests/test-cutils.c
+++ b/tests/test-cutils.c
@@ -1371,16 +1371,52 @@ static void test_qemu_strtou64_full_max(void)
static void test_qemu_strtosz_simple(void)
{
- const char *str = "12345M";
+ const char *str;
char *endptr = NULL;
int64_t res;
+ str = "0";
+ res = qemu_strtosz(str, &endptr);
+ g_assert_cmpint(res, ==, 0);
+ g_assert(endptr == str + 1);
+
+ str = "12345M";
res = qemu_strtosz(str, &endptr);
g_assert_cmpint(res, ==, 12345 * M_BYTE);
g_assert(endptr == str + 6);
res = qemu_strtosz(str, NULL);
g_assert_cmpint(res, ==, 12345 * M_BYTE);
+
+ /* Note: precision is 53 bits since we're parsing with strtod() */
+
+ str = "9007199254740991"; /* 2^53-1 */
+ res = qemu_strtosz_suffix(str, &endptr, QEMU_STRTOSZ_DEFSUFFIX_B);
+ g_assert_cmpint(res, ==, 0x1fffffffffffff);
+ g_assert(endptr == str + 16);
+
+ str = "9007199254740992"; /* 2^53 */
+ res = qemu_strtosz_suffix(str, &endptr, QEMU_STRTOSZ_DEFSUFFIX_B);
+ g_assert_cmpint(res, ==, 0x20000000000000);
+ g_assert(endptr == str + 16);
+
+ str = "9007199254740993"; /* 2^53+1 */
+ res = qemu_strtosz_suffix(str, &endptr, QEMU_STRTOSZ_DEFSUFFIX_B);
+ g_assert_cmpint(res, ==, 0x20000000000000); /* rounded to 53 bits */
+ g_assert(endptr == str + 16);
+
+ str = "9223372036854774784"; /* 0x7ffffffffffffc00 (53 msbs set) */
+ res = qemu_strtosz_suffix(str, &endptr, QEMU_STRTOSZ_DEFSUFFIX_B);
+ g_assert_cmpint(res, ==, 0x7ffffffffffffc00);
+ g_assert(endptr == str + 19);
+
+ str = "9223372036854775295"; /* 0x7ffffffffffffdff */
+ res = qemu_strtosz_suffix(str, &endptr, QEMU_STRTOSZ_DEFSUFFIX_B);
+ g_assert_cmpint(res, ==, 0x7ffffffffffffc00); /* rounded to 53 bits */
+ g_assert(endptr == str + 19);
+
+ /* 0x7ffffffffffffe00..0x7fffffffffffffff get rounded to
+ * 0x8000000000000000, thus -ERANGE; see test_qemu_strtosz_erange() */
}
static void test_qemu_strtosz_units(void)
@@ -1482,10 +1518,31 @@ static void test_qemu_strtosz_trailing(void)
static void test_qemu_strtosz_erange(void)
{
- const char *str = "10E";
+ const char *str;
char *endptr = NULL;
int64_t res;
+ str = "-1";
+ res = qemu_strtosz(str, &endptr);
+ g_assert_cmpint(res, ==, -ERANGE);
+ g_assert(endptr == str + 2);
+
+ str = "9223372036854775296"; /* 0x7ffffffffffffe00 */
+ res = qemu_strtosz_suffix(str, &endptr, QEMU_STRTOSZ_DEFSUFFIX_B);
+ g_assert_cmpint(res, ==, -ERANGE);
+ g_assert(endptr == str + 19);
+
+ str = "9223372036854775807"; /* 2^63-1 */
+ res = qemu_strtosz_suffix(str, &endptr, QEMU_STRTOSZ_DEFSUFFIX_B);
+ g_assert_cmpint(res, ==, -ERANGE);
+ g_assert(endptr == str + 19);
+
+ str = "9223372036854775808"; /* 2^63 */
+ res = qemu_strtosz_suffix(str, &endptr, QEMU_STRTOSZ_DEFSUFFIX_B);
+ g_assert_cmpint(res, ==, -ERANGE);
+ g_assert(endptr == str + 19);
+
+ str = "10E";
res = qemu_strtosz(str, &endptr);
g_assert_cmpint(res, ==, -ERANGE);
g_assert(endptr == str + 3);
--
2.7.4
- [Qemu-devel] [PATCH v2 17/24] util/cutils: Drop QEMU_STRTOSZ_DEFSUFFIX_* macros, (continued)
- [Qemu-devel] [PATCH v2 17/24] util/cutils: Drop QEMU_STRTOSZ_DEFSUFFIX_* macros, Markus Armbruster, 2017/02/21
- [Qemu-devel] [PATCH v2 01/24] test-qemu-opts: Cover qemu_opts_parse(), Markus Armbruster, 2017/02/21
- [Qemu-devel] [PATCH v2 07/24] util/cutils: Clean up variable names around qemu_strtol(), Markus Armbruster, 2017/02/21
- [Qemu-devel] [PATCH v2 11/24] test-cutils: Cover qemu_strtosz() invalid input, Markus Armbruster, 2017/02/21
- [Qemu-devel] [PATCH v2 10/24] test-cutils: Add missing qemu_strtosz()... endptr checks, Markus Armbruster, 2017/02/21
- [Qemu-devel] [PATCH v2 05/24] util/cutils: Rewrite documentation of qemu_strtol() & friends, Markus Armbruster, 2017/02/21
- [Qemu-devel] [PATCH v2 12/24] test-cutils: Cover qemu_strtosz() with trailing crap, Markus Armbruster, 2017/02/21
- [Qemu-devel] [PATCH v2 08/24] util/cutils: Clean up control flow around qemu_strtol() a bit, Markus Armbruster, 2017/02/21
- [Qemu-devel] [PATCH v2 03/24] test-cutils: Add missing qemu_strtol()... endptr checks, Markus Armbruster, 2017/02/21
- [Qemu-devel] [PATCH v2 19/24] test-cutils: Drop suffix from test_qemu_strtosz_simple(), Markus Armbruster, 2017/02/21
- [Qemu-devel] [PATCH v2 13/24] test-cutils: Cover qemu_strtosz() around range limits,
Markus Armbruster <=
- [Qemu-devel] [PATCH v2 09/24] option: Fix to reject invalid and overflowing numbers, Markus Armbruster, 2017/02/21
- [Qemu-devel] [PATCH v2 02/24] option: Assert value string isn't null, Markus Armbruster, 2017/02/21
- [Qemu-devel] [PATCH v2 14/24] util/cutils: New qemu_strtosz_metric(), Markus Armbruster, 2017/02/21
- [Qemu-devel] [PATCH v2 24/24] option: Fix checking of sizes for overflow and trailing crap, Markus Armbruster, 2017/02/21
- [Qemu-devel] [PATCH v2 16/24] util/cutils: New qemu_strtosz(), Markus Armbruster, 2017/02/21
- [Qemu-devel] [PATCH v2 15/24] util/cutils: Rename qemu_strtosz() to qemu_strtosz_MiB(), Markus Armbruster, 2017/02/21
- [Qemu-devel] [PATCH v2 20/24] qemu-img: Wrap cvtnum() around qemu_strtosz(), Markus Armbruster, 2017/02/21
- [Qemu-devel] [PATCH v2 06/24] util/cutils: Rename qemu_strtoll(), qemu_strtoull(), Markus Armbruster, 2017/02/21
- [Qemu-devel] [PATCH v2 23/24] util/cutils: Change qemu_strtosz*() from int64_t to uint64_t, Markus Armbruster, 2017/02/21
- [Qemu-devel] [PATCH v2 21/24] util/cutils: Let qemu_strtosz*() optionally reject trailing crap, Markus Armbruster, 2017/02/21