aboutsummaryrefslogtreecommitdiff
path: root/lundump.c
diff options
context:
space:
mode:
authorRoberto Ierusalimschy <roberto@inf.puc-rio.br>2008-04-07 15:44:23 -0300
committerRoberto Ierusalimschy <roberto@inf.puc-rio.br>2008-04-07 15:44:23 -0300
commitfacb0519a08faec540f81aee045c8e1dbb7e6aed (patch)
treeeb897bfa47a0d778faef84c1afe2a00c45588edf /lundump.c
parentffdca3522e757f0203b7bdbe5bccb0ae826bfd81 (diff)
downloadlua-facb0519a08faec540f81aee045c8e1dbb7e6aed.tar.gz
lua-facb0519a08faec540f81aee045c8e1dbb7e6aed.tar.bz2
lua-facb0519a08faec540f81aee045c8e1dbb7e6aed.zip
two bugs: invalid boolean values in constant table + too deep recursion
when reading nested functions
Diffstat (limited to 'lundump.c')
-rw-r--r--lundump.c9
1 files changed, 6 insertions, 3 deletions
diff --git a/lundump.c b/lundump.c
index 534d2d38..ebea131a 100644
--- a/lundump.c
+++ b/lundump.c
@@ -1,5 +1,5 @@
1/* 1/*
2** $Id: lundump.c,v 2.7 2006/02/17 15:51:03 roberto Exp roberto $ 2** $Id: lundump.c,v 2.8 2006/09/11 14:07:24 roberto Exp roberto $
3** load precompiled Lua chunks 3** load precompiled Lua chunks
4** See Copyright Notice in lua.h 4** See Copyright Notice in lua.h
5*/ 5*/
@@ -113,7 +113,7 @@ static void LoadConstants(LoadState* S, Proto* f)
113 setnilvalue(o); 113 setnilvalue(o);
114 break; 114 break;
115 case LUA_TBOOLEAN: 115 case LUA_TBOOLEAN:
116 setbvalue(o,LoadChar(S)); 116 setbvalue(o,LoadChar(S)!=0);
117 break; 117 break;
118 case LUA_TNUMBER: 118 case LUA_TNUMBER:
119 setnvalue(o,LoadNumber(S)); 119 setnvalue(o,LoadNumber(S));
@@ -159,7 +159,9 @@ static void LoadDebug(LoadState* S, Proto* f)
159 159
160static Proto* LoadFunction(LoadState* S, TString* p) 160static Proto* LoadFunction(LoadState* S, TString* p)
161{ 161{
162 Proto* f=luaF_newproto(S->L); 162 Proto* f;
163 if (++G(S->L)->nCcalls > LUAI_MAXCCALLS) error(S, "function nest too deep");
164 f=luaF_newproto(S->L);
163 setptvalue2s(S->L,S->L->top,f); incr_top(S->L); 165 setptvalue2s(S->L,S->L->top,f); incr_top(S->L);
164 f->source=LoadString(S); if (f->source==NULL) f->source=p; 166 f->source=LoadString(S); if (f->source==NULL) f->source=p;
165 f->linedefined=LoadInt(S); 167 f->linedefined=LoadInt(S);
@@ -173,6 +175,7 @@ static Proto* LoadFunction(LoadState* S, TString* p)
173 LoadDebug(S,f); 175 LoadDebug(S,f);
174 IF (!luaG_checkcode(f), "bad code"); 176 IF (!luaG_checkcode(f), "bad code");
175 S->L->top--; 177 S->L->top--;
178 G(S->L)->nCcalls--;
176 return f; 179 return f;
177} 180}
178 181