diff options
| author | Alin Nastac | 2020-02-03 12:58:04 +0000 |
|---|---|---|
| committer | Petr Štetiar | 2021-06-03 08:00:50 +0000 |
| commit | 9ec9cfc6574a197ea934489de056594f44088352 (patch) | |
| tree | 1b21638351b619614ec04966e0a17e959c7fd630 | |
| parent | 041c9d1c052bb4936fd03240f7d0dd64aedda972 (diff) | |
| download | ubus-9ec9cfc6574a197ea934489de056594f44088352.tar.gz | |
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 <alin.nastac@gmail.com>
[align code style, reword commit message]
Signed-off-by: Jo-Philipp Wich <jo@mein.io>
(cherry picked from commit 171469e3138cce191892e20b6fd35b52c9368064)
| -rw-r--r-- | lua/ubus.c | 5 |
1 files changed, 4 insertions, 1 deletions
@@ -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: |