[OpenWrt-Devel] [PATCH] blobmsg: blobmsg_add_json_element() 64-bit values

Dainis Jonitis jonitis at gmail.com
Fri Jan 10 09:41:04 EST 2020


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.

Signed-off-by: Dainis Jonitis <dainis.jonitis at ubnt.com>
---
 blobmsg_json.c | 10 ++++++++--
 1 file changed, 8 insertions(+), 2 deletions(-)

diff --git a/blobmsg_json.c b/blobmsg_json.c
index 1859211..394861a 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;
-- 
2.19.1


_______________________________________________
openwrt-devel mailing list
openwrt-devel at lists.openwrt.org
https://lists.openwrt.org/mailman/listinfo/openwrt-devel



More information about the openwrt-devel mailing list