diff options
| -rw-r--r-- | bugs | 21 | ||||
| -rw-r--r-- | lapi.c | 4 |
2 files changed, 23 insertions, 2 deletions
| @@ -1595,6 +1595,27 @@ ltablib.c: | |||
| 1595 | } | 1595 | } |
| 1596 | 1596 | ||
| 1597 | Bug{ | 1597 | Bug{ |
| 1598 | what = [[lua_setfenv may crash if called over an invalid object]], | ||
| 1599 | report = [[Mike Pall, on 11/2007]], | ||
| 1600 | since = [[5.1]], | ||
| 1601 | example = [[ | ||
| 1602 | > debug.setfenv(3, {}) | ||
| 1603 | ]], | ||
| 1604 | patch = [[ | ||
| 1605 | lapi.c: | ||
| 1606 | @@ -749,7 +749,7 @@ | ||
| 1607 | res = 0; | ||
| 1608 | break; | ||
| 1609 | } | ||
| 1610 | - luaC_objbarrier(L, gcvalue(o), hvalue(L->top - 1)); | ||
| 1611 | + if (res) luaC_objbarrier(L, gcvalue(o), hvalue(L->top - 1)); | ||
| 1612 | L->top--; | ||
| 1613 | lua_unlock(L); | ||
| 1614 | return res; | ||
| 1615 | ]], | ||
| 1616 | } | ||
| 1617 | |||
| 1618 | Bug{ | ||
| 1598 | what = [[ ]], | 1619 | what = [[ ]], |
| 1599 | report = [[ , on ]], | 1620 | report = [[ , on ]], |
| 1600 | since = [[i ]], | 1621 | since = [[i ]], |
| @@ -1,5 +1,5 @@ | |||
| 1 | /* | 1 | /* |
| 2 | ** $Id: lapi.c,v 2.60 2007/04/17 13:19:53 roberto Exp roberto $ | 2 | ** $Id: lapi.c,v 2.61 2007/08/07 16:53:40 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 | */ |
| @@ -733,7 +733,7 @@ LUA_API int lua_setfenv (lua_State *L, int idx) { | |||
| 733 | res = 0; | 733 | res = 0; |
| 734 | break; | 734 | break; |
| 735 | } | 735 | } |
| 736 | luaC_objbarrier(L, gcvalue(o), hvalue(L->top - 1)); | 736 | if (res) luaC_objbarrier(L, gcvalue(o), hvalue(L->top - 1)); |
| 737 | L->top--; | 737 | L->top--; |
| 738 | lua_unlock(L); | 738 | lua_unlock(L); |
| 739 | return res; | 739 | return res; |
