diff options
author | Lua Team <team@lua.org> | 2006-06-19 12:00:00 +0000 |
---|---|---|
committer | repogen <> | 2006-06-19 12:00:00 +0000 |
commit | 0de9166148af8217fd15c8540755753c0256581b (patch) | |
tree | 0d5d72e0a7b6b2c91d43dec1a49e8f76e417e6c7 /src/lvm.c | |
parent | e7731a8fb8a317aa5c444ef073bfad82fa5baa54 (diff) | |
download | lua-github-5.0.x.tar.gz |
Diffstat (limited to 'src/lvm.c')
-rw-r--r-- | src/lvm.c | 14 |
1 files changed, 7 insertions, 7 deletions
@@ -1,5 +1,5 @@ /* -** $Id: lvm.c,v 1.284b 2003/04/03 13:35:34 roberto Exp $ +** $Id: lvm.c,v 1.284c 2003/04/03 13:35:34 roberto Exp $ ** Lua virtual machine ** See Copyright Notice in lua.h */ @@ -321,15 +321,15 @@ void luaV_concat (lua_State *L, int total, int last) { luaG_concaterror(L, top-2, top-1); } else if (tsvalue(top-1)->tsv.len > 0) { /* if len=0, do nothing */ /* at least two string values; get as many as possible */ - lu_mem tl = cast(lu_mem, tsvalue(top-1)->tsv.len) + - cast(lu_mem, tsvalue(top-2)->tsv.len); + size_t tl = tsvalue(top-1)->tsv.len; char *buffer; int i; - while (n < total && tostring(L, top-n-1)) { /* collect total length */ - tl += tsvalue(top-n-1)->tsv.len; - n++; + /* collect total length */ + for (n = 1; n < total && tostring(L, top-n-1); n++) { + size_t l = tsvalue(top-n-1)->tsv.len; + if (l >= MAX_SIZET - tl) luaG_runerror(L, "string length overflow"); + tl += l; } - if (tl > MAX_SIZET) luaG_runerror(L, "string size overflow"); buffer = luaZ_openspace(L, &G(L)->buff, tl); tl = 0; for (i=n; i>0; i--) { /* concat all strings */ |