[Date Prev][Date Next][Thread Prev][Thread Next]
[Date Index]
[Thread Index]
- Subject: Re: 1e50 == 1?
- From: Matthew Paul Del Buono <delbu9c1@...>
- Date: Tue, 22 Jan 2008 21:17:06 -0500 (EST)
Would anyone be opposed to a patch that would cause the huge number becoming a negative number to stop occuring? I think I found a simple solution that should be safe for any architecture:
static int str_rep (lua_State *L) {
size_t l;
luaL_Buffer b;
const char *s = luaL_checklstring(L, 1, &l);
/* int n = luaL_checkint(L, 2);*/
int n = (int)(((unsigned int)-1) >> 1); /* Determine the maximum value of int (most compilers should opimize to do at compile time) */
lua_Number no = luaL_checknumber(L, 2); /* Get the parameter as a lua_Number first */
if (no > n) /* If we can't fit it, don't use it */
{
lua_pushstring(L, "string is too long");
lua_error(L);
}
else if (no < 0) /* If it's invalid, don't use it */
{
lua_pushstring(L, "string repetitions cannot be negative");
lua_error(L);
}
else
n = (int)no;
luaL_buffinit(L, &b);
while (n-- > 0)
luaL_addlstring(&b, s, l);
luaL_pushresult(&b);
return 1;
}
Again, any criticism, etc., welcome,
-- Matthew P. Del Buono a.k.a. Shirik