diff options
author | Dainis Jonitis <dainis.jonitis@ubnt.com> | 2020-01-10 17:41:04 +0300 |
---|---|---|
committer | Petr Štetiar <ynezz@true.cz> | 2020-01-20 18:16:49 +0300 |
commit | a36ee96618a9613c234d1f4404769becdf5c55e3 (patch) | |
tree | 4b848e874d01131afba6b67176a8907cbf98ce71 /blobmsg_json.c | |
parent | f0da3a4283b7d1192de5c7e620df9381cd5a724b (diff) |
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>
Diffstat (limited to 'blobmsg_json.c')
-rw-r--r-- | blobmsg_json.c | 10 |
1 files changed, 8 insertions, 2 deletions
diff --git a/blobmsg_json.c b/blobmsg_json.c index aee7a64..aedc2da 100644 --- a/blobmsg_json.c +++ b/blobmsg_json.c @@ -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; |