diff options
-rw-r--r-- | llex.c | 4 | ||||
-rw-r--r-- | llimits.h | 8 | ||||
-rw-r--r-- | lstring.c | 6 | ||||
-rw-r--r-- | lvm.c | 4 |
4 files changed, 14 insertions, 8 deletions
@@ -1,5 +1,5 @@ | |||
1 | /* | 1 | /* |
2 | ** $Id: llex.c,v 2.65 2013/04/26 13:07:53 roberto Exp roberto $ | 2 | ** $Id: llex.c,v 2.66 2013/05/14 15:59:04 roberto Exp roberto $ |
3 | ** Lexical Analyzer | 3 | ** Lexical Analyzer |
4 | ** See Copyright Notice in lua.h | 4 | ** See Copyright Notice in lua.h |
5 | */ | 5 | */ |
@@ -53,7 +53,7 @@ static void save (LexState *ls, int c) { | |||
53 | Mbuffer *b = ls->buff; | 53 | Mbuffer *b = ls->buff; |
54 | if (luaZ_bufflen(b) + 1 > luaZ_sizebuffer(b)) { | 54 | if (luaZ_bufflen(b) + 1 > luaZ_sizebuffer(b)) { |
55 | size_t newsize; | 55 | size_t newsize; |
56 | if (luaZ_sizebuffer(b) >= MAX_SIZET/2) | 56 | if (luaZ_sizebuffer(b) >= MAX_SIZE/2) |
57 | lexerror(ls, "lexical element too long", 0); | 57 | lexerror(ls, "lexical element too long", 0); |
58 | newsize = luaZ_sizebuffer(b) * 2; | 58 | newsize = luaZ_sizebuffer(b) * 2; |
59 | luaZ_resizebuffer(ls->L, b, newsize); | 59 | luaZ_resizebuffer(ls->L, b, newsize); |
@@ -1,5 +1,5 @@ | |||
1 | /* | 1 | /* |
2 | ** $Id: llimits.h,v 1.106 2013/05/27 12:43:37 roberto Exp roberto $ | 2 | ** $Id: llimits.h,v 1.107 2013/05/29 14:04:15 roberto Exp roberto $ |
3 | ** Limits, basic types, and some other `installation-dependent' definitions | 3 | ** Limits, basic types, and some other `installation-dependent' definitions |
4 | ** See Copyright Notice in lua.h | 4 | ** See Copyright Notice in lua.h |
5 | */ | 5 | */ |
@@ -27,8 +27,14 @@ typedef LUAI_MEM l_mem; | |||
27 | typedef unsigned char lu_byte; | 27 | typedef unsigned char lu_byte; |
28 | 28 | ||
29 | 29 | ||
30 | /* maximum value for size_t */ | ||
30 | #define MAX_SIZET ((size_t)(~(size_t)0)-2) | 31 | #define MAX_SIZET ((size_t)(~(size_t)0)-2) |
31 | 32 | ||
33 | /* maximum size visible for Lua (must be representable in a lua_Integer */ | ||
34 | #define MAX_SIZE (sizeof(size_t) <= sizeof(lua_Integer) ? MAX_SIZET \ | ||
35 | : (size_t)(~(lua_Unsigned)0)-2) | ||
36 | |||
37 | |||
32 | #define MAX_LUMEM ((lu_mem)(~(lu_mem)0)-2) | 38 | #define MAX_LUMEM ((lu_mem)(~(lu_mem)0)-2) |
33 | 39 | ||
34 | #define MAX_LMEM ((l_mem) ((MAX_LUMEM >> 1) - 2)) | 40 | #define MAX_LMEM ((l_mem) ((MAX_LUMEM >> 1) - 2)) |
@@ -1,5 +1,5 @@ | |||
1 | /* | 1 | /* |
2 | ** $Id: lstring.c,v 2.25 2012/10/02 17:41:50 roberto Exp roberto $ | 2 | ** $Id: lstring.c,v 2.26 2013/01/08 13:50:10 roberto Exp roberto $ |
3 | ** String table (keeps all strings handled by Lua) | 3 | ** String table (keeps all strings handled by Lua) |
4 | ** See Copyright Notice in lua.h | 4 | ** See Copyright Notice in lua.h |
5 | */ | 5 | */ |
@@ -157,7 +157,7 @@ TString *luaS_newlstr (lua_State *L, const char *str, size_t l) { | |||
157 | if (l <= LUAI_MAXSHORTLEN) /* short string? */ | 157 | if (l <= LUAI_MAXSHORTLEN) /* short string? */ |
158 | return internshrstr(L, str, l); | 158 | return internshrstr(L, str, l); |
159 | else { | 159 | else { |
160 | if (l + 1 > (MAX_SIZET - sizeof(TString))/sizeof(char)) | 160 | if (l + 1 > (MAX_SIZE - sizeof(TString))/sizeof(char)) |
161 | luaM_toobig(L); | 161 | luaM_toobig(L); |
162 | return createstrobj(L, str, l, LUA_TLNGSTR, G(L)->seed, NULL); | 162 | return createstrobj(L, str, l, LUA_TLNGSTR, G(L)->seed, NULL); |
163 | } | 163 | } |
@@ -174,7 +174,7 @@ TString *luaS_new (lua_State *L, const char *str) { | |||
174 | 174 | ||
175 | Udata *luaS_newudata (lua_State *L, size_t s, Table *e) { | 175 | Udata *luaS_newudata (lua_State *L, size_t s, Table *e) { |
176 | Udata *u; | 176 | Udata *u; |
177 | if (s > MAX_SIZET - sizeof(Udata)) | 177 | if (s > MAX_SIZE - sizeof(Udata)) |
178 | luaM_toobig(L); | 178 | luaM_toobig(L); |
179 | u = &luaC_newobj(L, LUA_TUSERDATA, sizeof(Udata) + s, NULL, 0)->u; | 179 | u = &luaC_newobj(L, LUA_TUSERDATA, sizeof(Udata) + s, NULL, 0)->u; |
180 | u->uv.len = s; | 180 | u->uv.len = s; |
@@ -1,5 +1,5 @@ | |||
1 | /* | 1 | /* |
2 | ** $Id: lvm.c,v 2.172 2013/06/04 19:36:42 roberto Exp roberto $ | 2 | ** $Id: lvm.c,v 2.173 2013/06/07 19:02:05 roberto Exp roberto $ |
3 | ** Lua virtual machine | 3 | ** Lua virtual machine |
4 | ** See Copyright Notice in lua.h | 4 | ** See Copyright Notice in lua.h |
5 | */ | 5 | */ |
@@ -284,7 +284,7 @@ void luaV_concat (lua_State *L, int total) { | |||
284 | /* collect total length */ | 284 | /* collect total length */ |
285 | for (i = 1; i < total && tostring(L, top-i-1); i++) { | 285 | for (i = 1; i < total && tostring(L, top-i-1); i++) { |
286 | size_t l = tsvalue(top-i-1)->len; | 286 | size_t l = tsvalue(top-i-1)->len; |
287 | if (l >= (MAX_SIZET/sizeof(char)) - tl) | 287 | if (l >= (MAX_SIZE/sizeof(char)) - tl) |
288 | luaG_runerror(L, "string length overflow"); | 288 | luaG_runerror(L, "string length overflow"); |
289 | tl += l; | 289 | tl += l; |
290 | } | 290 | } |