From 171469e3138cce191892e20b6fd35b52c9368064 Mon Sep 17 00:00:00 2001 From: Alin Nastac Date: Mon, 3 Feb 2020 13:58:04 +0100 Subject: [PATCH] lua: avoid truncation of large numeric values If the Lua number exceeds the maximum value representable by an unsigned 32bit integer, store it in an unsigned 64bit integer field instead. Signed-off-by: Alin Nastac [align code style, reword commit message] Signed-off-by: Jo-Philipp Wich --- lua/ubus.c | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/lua/ubus.c b/lua/ubus.c index 86dcc50..e2bb081 100644 --- a/lua/ubus.c +++ b/lua/ubus.c @@ -196,7 +196,10 @@ ubus_lua_format_blob(lua_State *L, struct blob_buf *b, bool table) case LUA_TINT: #endif case LUA_TNUMBER: - blobmsg_add_u32(b, key, (uint32_t)lua_tointeger(L, -1)); + if ((uint64_t)lua_tonumber(L, -1) > INT_MAX) + blobmsg_add_u64(b, key, (uint64_t)lua_tonumber(L, -1)); + else + blobmsg_add_u32(b, key, (uint32_t)lua_tointeger(L, -1)); break; case LUA_TSTRING: -- 2.25.1