cloudwu / sproto

Yet another protocol library like google protocol buffers , but simple and fast.
MIT License
942 stars 253 forks source link

在32位的机器上发送一个比较大的浮点数异常。 #72

Closed aftermisak closed 7 years ago

aftermisak commented 7 years ago

发现问题的代码在 lsproto.c -> static int encode(const struct sproto_arg *args) 中对SPROTO_TINTEGER的处理

lua_Integer v; lua_Integer vh; int isnum; if (args->extra) { // It's decimal. lua_Number vn = lua_tonumber(L, -1); v = (lua_Integer)(vn * args->extra + 0.5);

这样比如我用integer(2)发送一个80,000,000, 会导致v最终是一个负数。 建议将v改为int64_t类型,这样兼容的范围更宽泛,只要不要用什么integer(6) 发送上亿的数据...

int64_t v; v = (int64_t)(vn * args->extra + 0.5);