diff --git a/src/lua/utils.c b/src/lua/utils.c index b40abf54f52960b92d6314849e0c2cdf6adc8385..b78b5d6e43ce0459538532f7ed56ca13be847a8d 100644 --- a/src/lua/utils.c +++ b/src/lua/utils.c @@ -499,10 +499,10 @@ luaL_tofield(struct lua_State *L, struct luaL_serializer *cfg, int index, if (isfinite(num) && modf(num, &intpart) != 0.0) { field->type = MP_DOUBLE; field->dval = num; - } else if (num >= 0 && num <= UINT64_MAX) { + } else if (num >= 0 && num < exp2(64)) { field->type = MP_UINT; field->ival = (uint64_t) num; - } else if (num >= INT64_MIN && num <= INT64_MAX) { + } else if (num > -exp2(63) && num < exp2(63)) { field->type = MP_INT; field->ival = (int64_t) num; } else { diff --git a/test/box/indices_any_type.result b/test/box/indices_any_type.result index 051cb605181fbd0109648ddf5828685d059b6852..dce9f754c1fe0082b386ad24b4a2a0ef7b631f54 100644 --- a/test/box/indices_any_type.result +++ b/test/box/indices_any_type.result @@ -393,12 +393,12 @@ s5:insert({0xFFFFFFFFFFFFFFFFULL}) ... s5:insert({ffi.new('double', ffi.C.exp2(64))}) -- success --- -- [0] +- [1.844674407371e+19] ... s5:select() --- - - [18446744073709551615] - - [0] + - [1.844674407371e+19] ... s5:truncate() ---