diff options
author | Roberto Ierusalimschy <roberto@inf.puc-rio.br> | 2003-03-14 15:59:21 -0300 |
---|---|---|
committer | Roberto Ierusalimschy <roberto@inf.puc-rio.br> | 2003-03-14 15:59:21 -0300 |
commit | c9ea94ec92a8dc02ff689aea3485c891780128b9 (patch) | |
tree | 282e5a75a262d24bfee7bb72f6bd37d47dd93d50 | |
parent | fa4b4c11009a227769499ea44bcaea295c03505f (diff) | |
download | lua-c9ea94ec92a8dc02ff689aea3485c891780128b9.tar.gz lua-c9ea94ec92a8dc02ff689aea3485c891780128b9.tar.bz2 lua-c9ea94ec92a8dc02ff689aea3485c891780128b9.zip |
out-of-bound upvalues (in C) are acceptable indices
-rw-r--r-- | lapi.c | 15 |
1 files changed, 10 insertions, 5 deletions
@@ -1,5 +1,5 @@ | |||
1 | /* | 1 | /* |
2 | ** $Id: lapi.c,v 1.231 2003/02/24 16:54:20 roberto Exp roberto $ | 2 | ** $Id: lapi.c,v 1.232 2003/02/27 12:33:07 roberto Exp roberto $ |
3 | ** Lua API | 3 | ** Lua API |
4 | ** See Copyright Notice in lua.h | 4 | ** See Copyright Notice in lua.h |
5 | */ | 5 | */ |
@@ -56,8 +56,10 @@ static TObject *negindex (lua_State *L, int idx) { | |||
56 | default: { | 56 | default: { |
57 | TObject *func = (L->base - 1); | 57 | TObject *func = (L->base - 1); |
58 | idx = LUA_GLOBALSINDEX - idx; | 58 | idx = LUA_GLOBALSINDEX - idx; |
59 | api_check(L, iscfunction(func) && idx <= clvalue(func)->c.nupvalues); | 59 | lua_assert(iscfunction(func)); |
60 | return &clvalue(func)->c.upvalue[idx-1]; | 60 | return (idx <= clvalue(func)->c.nupvalues) |
61 | ? &clvalue(func)->c.upvalue[idx-1] | ||
62 | : NULL; | ||
61 | } | 63 | } |
62 | } | 64 | } |
63 | } | 65 | } |
@@ -68,8 +70,11 @@ static TObject *luaA_index (lua_State *L, int idx) { | |||
68 | api_check(L, idx <= L->top - L->base); | 70 | api_check(L, idx <= L->top - L->base); |
69 | return L->base + idx - 1; | 71 | return L->base + idx - 1; |
70 | } | 72 | } |
71 | else | 73 | else { |
72 | return negindex(L, idx); | 74 | TObject *o = negindex(L, idx); |
75 | api_check(L, o != NULL); | ||
76 | return o; | ||
77 | } | ||
73 | } | 78 | } |
74 | 79 | ||
75 | 80 | ||