summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--llex.c4
-rw-r--r--llimits.h8
-rw-r--r--lstring.c6
-rw-r--r--lvm.c4
4 files changed, 14 insertions, 8 deletions
diff --git a/llex.c b/llex.c
index b14c0257..920922eb 100644
--- a/llex.c
+++ b/llex.c
@@ -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);
diff --git a/llimits.h b/llimits.h
index 86af8cfb..4463e0c0 100644
--- a/llimits.h
+++ b/llimits.h
@@ -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;
27typedef unsigned char lu_byte; 27typedef 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))
diff --git a/lstring.c b/lstring.c
index 48fd1414..9809f006 100644
--- a/lstring.c
+++ b/lstring.c
@@ -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
175Udata *luaS_newudata (lua_State *L, size_t s, Table *e) { 175Udata *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;
diff --git a/lvm.c b/lvm.c
index 5e01944c..d78fc039 100644
--- a/lvm.c
+++ b/lvm.c
@@ -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 }