From: Alin Nastac Date: Mon, 3 Feb 2020 12:58:04 +0000 (+0100) Subject: lua: avoid truncation of large numeric values X-Git-Url: https://git.librecmc.org/?p=oweals%2Fubus.git;a=commitdiff_plain 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 --- 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: