blobmsg: blobmsg_add_json_element() 64-bit values
authorDainis Jonitis <dainis.jonitis@ubnt.com>
Fri, 10 Jan 2020 14:41:04 +0000 (16:41 +0200)
committerPetr Štetiar <ynezz@true.cz>
Mon, 20 Jan 2020 15:16:49 +0000 (16:16 +0100)
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>
blobmsg_json.c
tests/cram/test_blobmsg.t

index aee7a64..aedc2da 100644 (file)
@@ -66,9 +66,15 @@ bool blobmsg_add_json_element(struct blob_buf *b, const char *name, json_object
        case json_type_boolean:
                blobmsg_add_u8(b, name, json_object_get_boolean(obj));
                break;
-       case json_type_int:
-               blobmsg_add_u32(b, name, json_object_get_int(obj));
+       case json_type_int: {
+               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;
+       }
        case json_type_double:
                blobmsg_add_double(b, name, json_object_get_double(obj));
                break;
index 84ec143..74ad326 100644 (file)
@@ -46,8 +46,8 @@ check that blobmsg is producing expected results:
   32767 (i32)
   -2147483648 (i32)
   2147483647 (i32)
-  -2147483648 (i32)
-  2147483647 (i32)
+  -9223372036854775808 (i64)
+  9223372036854775807 (i64)
   133.700000 (dbl)
   }
   Testdata: {
@@ -60,8 +60,8 @@ check that blobmsg is producing expected results:
   \tbar-max : 32767 (i32) (esc)
   \tbaz-min : -2147483648 (i32) (esc)
   \tbaz-max : 2147483647 (i32) (esc)
-  \ttaz-min : -2147483648 (i32) (esc)
-  \ttaz-max : 2147483647 (i32) (esc)
+  \ttaz-min : -9223372036854775808 (i64) (esc)
+  \ttaz-max : 9223372036854775807 (i64) (esc)
   \tworld : 2 (str) (esc)
   }
 
@@ -109,8 +109,8 @@ check that blobmsg is producing expected results:
   32767 (i32)
   -2147483648 (i32)
   2147483647 (i32)
-  -2147483648 (i32)
-  2147483647 (i32)
+  -9223372036854775808 (i64)
+  9223372036854775807 (i64)
   133.700000 (dbl)
   }
   Testdata: {
@@ -123,8 +123,8 @@ check that blobmsg is producing expected results:
   \tbar-max : 32767 (i32) (esc)
   \tbaz-min : -2147483648 (i32) (esc)
   \tbaz-max : 2147483647 (i32) (esc)
-  \ttaz-min : -2147483648 (i32) (esc)
-  \ttaz-max : 2147483647 (i32) (esc)
+  \ttaz-min : -9223372036854775808 (i64) (esc)
+  \ttaz-max : 9223372036854775807 (i64) (esc)
   \tworld : 2 (str) (esc)
   }
 
@@ -172,8 +172,8 @@ check that blobmsg is producing expected results:
   32767 (i32)
   -2147483648 (i32)
   2147483647 (i32)
-  -2147483648 (i32)
-  2147483647 (i32)
+  -9223372036854775808 (i64)
+  9223372036854775807 (i64)
   133.700000 (dbl)
   }
   Testdata: {
@@ -186,8 +186,8 @@ check that blobmsg is producing expected results:
   \tbar-max : 32767 (i32) (esc)
   \tbaz-min : -2147483648 (i32) (esc)
   \tbaz-max : 2147483647 (i32) (esc)
-  \ttaz-min : -2147483648 (i32) (esc)
-  \ttaz-max : 2147483647 (i32) (esc)
+  \ttaz-min : -9223372036854775808 (i64) (esc)
+  \ttaz-max : 9223372036854775807 (i64) (esc)
   \tworld : 2 (str) (esc)
   }
 
@@ -235,8 +235,8 @@ check that blobmsg is producing expected results:
   32767 (i32)
   -2147483648 (i32)
   2147483647 (i32)
-  -2147483648 (i32)
-  2147483647 (i32)
+  -9223372036854775808 (i64)
+  9223372036854775807 (i64)
   133.700000 (dbl)
   }
   Testdata: {
@@ -249,7 +249,7 @@ check that blobmsg is producing expected results:
   \tbar-max : 32767 (i32) (esc)
   \tbaz-min : -2147483648 (i32) (esc)
   \tbaz-max : 2147483647 (i32) (esc)
-  \ttaz-min : -2147483648 (i32) (esc)
-  \ttaz-max : 2147483647 (i32) (esc)
+  \ttaz-min : -9223372036854775808 (i64) (esc)
+  \ttaz-max : 9223372036854775807 (i64) (esc)
   \tworld : 2 (str) (esc)
   }