+++ /dev/null
---- lua-5.1.4.orig/src/lcode.c 2007/12/28 15:32:23 2.25.1.3
-+++ lua-5.1.4/src/lcode.c 2009/06/15 14:07:34
-@@ -544,15 +544,18 @@
- pc = NO_JUMP; /* always true; do nothing */
- break;
- }
-- case VFALSE: {
-- pc = luaK_jump(fs); /* always jump */
-- break;
-- }
- case VJMP: {
- invertjump(fs, e);
- pc = e->u.s.info;
- break;
- }
-+ case VFALSE: {
-+ if (!hasjumps(e)) {
-+ pc = luaK_jump(fs); /* always jump */
-+ break;
-+ }
-+ /* else go through */
-+ }
- default: {
- pc = jumponcond(fs, e, 0);
- break;
-@@ -572,14 +575,17 @@
- pc = NO_JUMP; /* always false; do nothing */
- break;
- }
-- case VTRUE: {
-- pc = luaK_jump(fs); /* always jump */
-- break;
-- }
- case VJMP: {
- pc = e->u.s.info;
- break;
- }
-+ case VTRUE: {
-+ if (!hasjumps(e)) {
-+ pc = luaK_jump(fs); /* always jump */
-+ break;
-+ }
-+ /* else go through */
-+ }
- default: {
- pc = jumponcond(fs, e, 1);
- break;
-
--- /dev/null
+--- lua-5.1.4.orig/src/lcode.c 2007/12/28 15:32:23 2.25.1.3
++++ lua-5.1.4/src/lcode.c 2009/06/15 14:07:34
+@@ -544,15 +544,18 @@
+ pc = NO_JUMP; /* always true; do nothing */
+ break;
+ }
+- case VFALSE: {
+- pc = luaK_jump(fs); /* always jump */
+- break;
+- }
+ case VJMP: {
+ invertjump(fs, e);
+ pc = e->u.s.info;
+ break;
+ }
++ case VFALSE: {
++ if (!hasjumps(e)) {
++ pc = luaK_jump(fs); /* always jump */
++ break;
++ }
++ /* else go through */
++ }
+ default: {
+ pc = jumponcond(fs, e, 0);
+ break;
+@@ -572,14 +575,17 @@
+ pc = NO_JUMP; /* always false; do nothing */
+ break;
+ }
+- case VTRUE: {
+- pc = luaK_jump(fs); /* always jump */
+- break;
+- }
+ case VJMP: {
+ pc = e->u.s.info;
+ break;
+ }
++ case VTRUE: {
++ if (!hasjumps(e)) {
++ pc = luaK_jump(fs); /* always jump */
++ break;
++ }
++ /* else go through */
++ }
+ default: {
+ pc = jumponcond(fs, e, 1);
+ break;
+
--- /dev/null
+--- lua-5.1.4.orig/src/lvm.c 2007/12/28 15:32:23 2.63.1.3
++++ lua-5.1.4/src/lvm.c 2009/07/01 20:36:59
+@@ -133,6 +133,7 @@
+
+ void luaV_settable (lua_State *L, const TValue *t, TValue *key, StkId val) {
+ int loop;
++ TValue temp;
+ for (loop = 0; loop < MAXTAGLOOP; loop++) {
+ const TValue *tm;
+ if (ttistable(t)) { /* `t' is a table? */
+@@ -152,7 +153,9 @@
+ callTM(L, tm, t, key, val);
+ return;
+ }
+- t = tm; /* else repeat with `tm' */
++ /* else repeat with `tm' */
++ setobj(L, &temp, tm); /* avoid pointing inside table (may rehash) */
++ t = &temp;
+ }
+ luaG_runerror(L, "loop in settable");
+ }
+
--- /dev/null
+--- lua-5.1.4.orig/src/ldblib.c 2007/12/28 15:32:23 2.63.1.3
++++ lua-5.1.4/src/ldblib.c 2010/02/23 12:36:59
+@@ -45,6 +45,7 @@
+
+
+ static int db_getfenv (lua_State *L) {
++ luaL_checkany(L, 1);
+ lua_getfenv(L, 1);
+ return 1;
+ }
--- /dev/null
+--- lua-5.1.4.orig/src/llex.c 2007/12/28 15:32:23 2.63.1.3
++++ lua-5.1.4/src/llex.c 2010/02/23 12:36:59
+@@ -118,8 +118,10 @@
+ lua_State *L = ls->L;
+ TString *ts = luaS_newlstr(L, str, l);
+ TValue *o = luaH_setstr(L, ls->fs->h, ts); /* entry for `str' */
+- if (ttisnil(o))
++ if (ttisnil(o)) {
+ setbvalue(o, 1); /* make sure `str' will not be collected */
++ luaC_checkGC(L);
++ }
+ return ts;
+ }
+
--- /dev/null
+--- lua-5.1.4.orig/src/lstrlib.c 2008/07/11 17:27:21 1.132.1.4
++++ lua-5.1.4/src/lstrlib.c 2010/05/14 15:12:53
+@@ -754,6 +754,7 @@
+
+
+ static int str_format (lua_State *L) {
++ int top = lua_gettop(L);
+ int arg = 1;
+ size_t sfl;
+ const char *strfrmt = luaL_checklstring(L, arg, &sfl);
+@@ -768,7 +769,8 @@
+ else { /* format item */
+ char form[MAX_FORMAT]; /* to store the format (`%...') */
+ char buff[MAX_ITEM]; /* to store the formatted item */
+- arg++;
++ if (++arg > top)
++ luaL_argerror(L, arg, "no value");
+ strfrmt = scanformat(L, strfrmt, form);
+ switch (*strfrmt++) {
+ case 'c': {
--- /dev/null
+--- lua-5.1.4.orig/src/liolib.c 2008/01/18 17:47:43 2.73.1.3
++++ lua-5.1.4.orig/src/liolib.c 2010/05/14 15:29:29
+@@ -276,7 +276,10 @@
+ lua_pushnumber(L, d);
+ return 1;
+ }
+- else return 0; /* read fails */
++ else {
++ lua_pushnil(L); /* "result" to be removed */
++ return 0; /* read fails */
++ }
+ }
+
+
+++ /dev/null
---- lua-5.1.4.orig/src/ldblib.c 2007/12/28 15:32:23 2.63.1.3
-+++ lua-5.1.4/src/ldblib.c 2010/02/23 12:36:59
-@@ -45,6 +45,7 @@
-
-
- static int db_getfenv (lua_State *L) {
-+ luaL_checkany(L, 1);
- lua_getfenv(L, 1);
- return 1;
- }
+++ /dev/null
---- lua-5.1.4.orig/src/llex.c 2007/12/28 15:32:23 2.63.1.3
-+++ lua-5.1.4/src/llex.c 2010/02/23 12:36:59
-@@ -118,8 +118,10 @@
- lua_State *L = ls->L;
- TString *ts = luaS_newlstr(L, str, l);
- TValue *o = luaH_setstr(L, ls->fs->h, ts); /* entry for `str' */
-- if (ttisnil(o))
-+ if (ttisnil(o)) {
- setbvalue(o, 1); /* make sure `str' will not be collected */
-+ luaC_checkGC(L);
-+ }
- return ts;
- }
-
+++ /dev/null
---- lua-5.1.4.orig/src/lvm.c 2007/12/28 15:32:23 2.63.1.3
-+++ lua-5.1.4/src/lvm.c 2009/07/01 20:36:59
-@@ -133,6 +133,7 @@
-
- void luaV_settable (lua_State *L, const TValue *t, TValue *key, StkId val) {
- int loop;
-+ TValue temp;
- for (loop = 0; loop < MAXTAGLOOP; loop++) {
- const TValue *tm;
- if (ttistable(t)) { /* `t' is a table? */
-@@ -152,7 +153,9 @@
- callTM(L, tm, t, key, val);
- return;
- }
-- t = tm; /* else repeat with `tm' */
-+ /* else repeat with `tm' */
-+ setobj(L, &temp, tm); /* avoid pointing inside table (may rehash) */
-+ t = &temp;
- }
- luaG_runerror(L, "loop in settable");
- }
-