diff options
| -rw-r--r-- | bugs | 21 | ||||
| -rw-r--r-- | lapi.c | 6 |
2 files changed, 24 insertions, 3 deletions
| @@ -669,3 +669,24 @@ patch = [[ | |||
| 669 | ]] | 669 | ]] |
| 670 | } | 670 | } |
| 671 | 671 | ||
| 672 | |||
| 673 | Bug{ | ||
| 674 | what = [[lua_getupvalue and setupvalue do not check for index too small]], | ||
| 675 | |||
| 676 | report = [[Mike Pall, ?/2004]], | ||
| 677 | |||
| 678 | example = [[debug.getupvalue(function() end, 0)]], | ||
| 679 | |||
| 680 | patch = [[ | ||
| 681 | * lapi.c | ||
| 682 | 941c941 | ||
| 683 | < if (n > f->c.nupvalues) return NULL; | ||
| 684 | --- | ||
| 685 | > if (!(1 <= n && n <= f->c.nupvalues)) return NULL; | ||
| 686 | 947c947 | ||
| 687 | < if (n > p->sizeupvalues) return NULL; | ||
| 688 | --- | ||
| 689 | > if (!(1 <= n && n <= p->sizeupvalues)) return NULL; | ||
| 690 | ]] | ||
| 691 | } | ||
| 692 | |||
| @@ -1,5 +1,5 @@ | |||
| 1 | /* | 1 | /* |
| 2 | ** $Id: lapi.c,v 2.15 2004/08/10 19:17:23 roberto Exp roberto $ | 2 | ** $Id: lapi.c,v 2.16 2004/08/12 17:02:51 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 | */ |
| @@ -938,13 +938,13 @@ static const char *aux_upvalue (lua_State *L, StkId fi, int n, TValue **val) { | |||
| 938 | if (!ttisfunction(fi)) return NULL; | 938 | if (!ttisfunction(fi)) return NULL; |
| 939 | f = clvalue(fi); | 939 | f = clvalue(fi); |
| 940 | if (f->c.isC) { | 940 | if (f->c.isC) { |
| 941 | if (n > f->c.nupvalues) return NULL; | 941 | if (!(1 <= n && n <= f->c.nupvalues)) return NULL; |
| 942 | *val = &f->c.upvalue[n-1]; | 942 | *val = &f->c.upvalue[n-1]; |
| 943 | return ""; | 943 | return ""; |
| 944 | } | 944 | } |
| 945 | else { | 945 | else { |
| 946 | Proto *p = f->l.p; | 946 | Proto *p = f->l.p; |
| 947 | if (n > p->sizeupvalues) return NULL; | 947 | if (!(1 <= n && n <= p->sizeupvalues)) return NULL; |
| 948 | *val = f->l.upvals[n-1]->v; | 948 | *val = f->l.upvals[n-1]->v; |
| 949 | return getstr(p->upvalues[n-1]); | 949 | return getstr(p->upvalues[n-1]); |
| 950 | } | 950 | } |
