blobmsg: blobmsg_add_json_element() 64-bit values

libjson-c json_type_int values are stored as int64_t. Use
json_object_get_int64() instead of json_object_get_int()
to avoid clamping to INT32_MAX.

Reviewed-by: Jo-Philipp Wich <jo@mein.io>
Signed-off-by: Dainis Jonitis <dainis.jonitis@ubnt.com>
[fixed author to match SoB, added unit test results]
Signed-off-by: Petr Štetiar <ynezz@true.cz>
This commit is contained in:
Dainis Jonitis 2020-01-10 16:41:04 +02:00 committed by Petr Štetiar
parent f0da3a4283
commit a36ee96618
2 changed files with 24 additions and 18 deletions

View file

@ -66,9 +66,15 @@ bool blobmsg_add_json_element(struct blob_buf *b, const char *name, json_object
case json_type_boolean: case json_type_boolean:
blobmsg_add_u8(b, name, json_object_get_boolean(obj)); blobmsg_add_u8(b, name, json_object_get_boolean(obj));
break; break;
case json_type_int: case json_type_int: {
blobmsg_add_u32(b, name, json_object_get_int(obj)); int64_t i64 = json_object_get_int64(obj);
if (i64 >= INT32_MIN && i64 <= INT32_MAX) {
blobmsg_add_u32(b, name, (uint32_t)i64);
} else {
blobmsg_add_u64(b, name, (uint64_t)i64);
}
break; break;
}
case json_type_double: case json_type_double:
blobmsg_add_double(b, name, json_object_get_double(obj)); blobmsg_add_double(b, name, json_object_get_double(obj));
break; break;

View file

@ -46,8 +46,8 @@ check that blobmsg is producing expected results:
32767 (i32) 32767 (i32)
-2147483648 (i32) -2147483648 (i32)
2147483647 (i32) 2147483647 (i32)
-2147483648 (i32) -9223372036854775808 (i64)
2147483647 (i32) 9223372036854775807 (i64)
133.700000 (dbl) 133.700000 (dbl)
} }
Testdata: { Testdata: {
@ -60,8 +60,8 @@ check that blobmsg is producing expected results:
\tbar-max : 32767 (i32) (esc) \tbar-max : 32767 (i32) (esc)
\tbaz-min : -2147483648 (i32) (esc) \tbaz-min : -2147483648 (i32) (esc)
\tbaz-max : 2147483647 (i32) (esc) \tbaz-max : 2147483647 (i32) (esc)
\ttaz-min : -2147483648 (i32) (esc) \ttaz-min : -9223372036854775808 (i64) (esc)
\ttaz-max : 2147483647 (i32) (esc) \ttaz-max : 9223372036854775807 (i64) (esc)
\tworld : 2 (str) (esc) \tworld : 2 (str) (esc)
} }
@ -109,8 +109,8 @@ check that blobmsg is producing expected results:
32767 (i32) 32767 (i32)
-2147483648 (i32) -2147483648 (i32)
2147483647 (i32) 2147483647 (i32)
-2147483648 (i32) -9223372036854775808 (i64)
2147483647 (i32) 9223372036854775807 (i64)
133.700000 (dbl) 133.700000 (dbl)
} }
Testdata: { Testdata: {
@ -123,8 +123,8 @@ check that blobmsg is producing expected results:
\tbar-max : 32767 (i32) (esc) \tbar-max : 32767 (i32) (esc)
\tbaz-min : -2147483648 (i32) (esc) \tbaz-min : -2147483648 (i32) (esc)
\tbaz-max : 2147483647 (i32) (esc) \tbaz-max : 2147483647 (i32) (esc)
\ttaz-min : -2147483648 (i32) (esc) \ttaz-min : -9223372036854775808 (i64) (esc)
\ttaz-max : 2147483647 (i32) (esc) \ttaz-max : 9223372036854775807 (i64) (esc)
\tworld : 2 (str) (esc) \tworld : 2 (str) (esc)
} }
@ -172,8 +172,8 @@ check that blobmsg is producing expected results:
32767 (i32) 32767 (i32)
-2147483648 (i32) -2147483648 (i32)
2147483647 (i32) 2147483647 (i32)
-2147483648 (i32) -9223372036854775808 (i64)
2147483647 (i32) 9223372036854775807 (i64)
133.700000 (dbl) 133.700000 (dbl)
} }
Testdata: { Testdata: {
@ -186,8 +186,8 @@ check that blobmsg is producing expected results:
\tbar-max : 32767 (i32) (esc) \tbar-max : 32767 (i32) (esc)
\tbaz-min : -2147483648 (i32) (esc) \tbaz-min : -2147483648 (i32) (esc)
\tbaz-max : 2147483647 (i32) (esc) \tbaz-max : 2147483647 (i32) (esc)
\ttaz-min : -2147483648 (i32) (esc) \ttaz-min : -9223372036854775808 (i64) (esc)
\ttaz-max : 2147483647 (i32) (esc) \ttaz-max : 9223372036854775807 (i64) (esc)
\tworld : 2 (str) (esc) \tworld : 2 (str) (esc)
} }
@ -235,8 +235,8 @@ check that blobmsg is producing expected results:
32767 (i32) 32767 (i32)
-2147483648 (i32) -2147483648 (i32)
2147483647 (i32) 2147483647 (i32)
-2147483648 (i32) -9223372036854775808 (i64)
2147483647 (i32) 9223372036854775807 (i64)
133.700000 (dbl) 133.700000 (dbl)
} }
Testdata: { Testdata: {
@ -249,7 +249,7 @@ check that blobmsg is producing expected results:
\tbar-max : 32767 (i32) (esc) \tbar-max : 32767 (i32) (esc)
\tbaz-min : -2147483648 (i32) (esc) \tbaz-min : -2147483648 (i32) (esc)
\tbaz-max : 2147483647 (i32) (esc) \tbaz-max : 2147483647 (i32) (esc)
\ttaz-min : -2147483648 (i32) (esc) \ttaz-min : -9223372036854775808 (i64) (esc)
\ttaz-max : 2147483647 (i32) (esc) \ttaz-max : 9223372036854775807 (i64) (esc)
\tworld : 2 (str) (esc) \tworld : 2 (str) (esc)
} }