# # patch "ChangeLog" # from [4bf865d8a8bf07e474bb88c641b396aa991b878e] # to [d2a2c2588e2b5712692718a3c7fab8a151ea03c3] # # patch "lua/lapi.c" # from [aab0780b5a32d4545a0771d6524034c7010ac84a] # to [b1d73f7f7468dbd4dc4ff1208fb482b92fa77fc2] # # patch "lua/lgc.c" # from [88ba8787c48bd5e9d7a255b50e7ff587ca740f18] # to [da25605c036b7bee649696d0f2df449d5c8ff8cf] # # patch "lua/lvm.c" # from [a7ba54085b2d7755938c1db9c57e2fecab3058b1] # to [b3b742dd83254cb68fdd3010af2dae9fc74c52c1] # # patch "win32/fs.cc" # from [9ce58de1f6f841bb8bd66a3f99d465978a92df9f] # to [6cf4bc46e555a714ee4f6ed96e8d266b546eb575] # ======================================================================== --- ChangeLog 4bf865d8a8bf07e474bb88c641b396aa991b878e +++ ChangeLog d2a2c2588e2b5712692718a3c7fab8a151ea03c3 @@ -1,3 +1,10 @@ +2005-12-01 Matthew Gregan + + * win32/fs.cc (rename_clobberingly_impl): Improve error handling + around LoadLibrary call. + * lua/{lvm.c,lgc.c,lapi.c}: Lua post-5.0.2 bugfixes from + http://www.lua.org/bugs.html. Submitted by Alex Queiroz. + 2005-11-29 Matt Johnston * Makefile.am: add PCH_FLAGS only when compiling monotone and ======================================================================== --- lua/lapi.c aab0780b5a32d4545a0771d6524034c7010ac84a +++ lua/lapi.c b1d73f7f7468dbd4dc4ff1208fb482b92fa77fc2 @@ -879,13 +879,13 @@ if (!ttisfunction(fi)) return NULL; f = clvalue(fi); if (f->c.isC) { - if (n > f->c.nupvalues) return NULL; + if (!(1 <= n && n <= f->c.nupvalues)) return NULL; *val = &f->c.upvalue[n-1]; return ""; } else { Proto *p = f->l.p; - if (n > p->sizeupvalues) return NULL; + if (!(1 <= n && n <= p->sizeupvalues)) return NULL; *val = f->l.upvals[n-1]->v; return getstr(p->upvalues[n-1]); } ======================================================================== --- lua/lgc.c 88ba8787c48bd5e9d7a255b50e7ff587ca740f18 +++ lua/lgc.c da25605c036b7bee649696d0f2df449d5c8ff8cf @@ -218,10 +218,8 @@ markvalue(st, cl->l.p); for (i=0; il.nupvalues; i++) { /* mark its upvalues */ UpVal *u = cl->l.upvals[i]; - if (!u->marked) { - markobject(st, &u->value); - u->marked = 1; - } + markobject(st, u->v); + u->marked = 1; } } } ======================================================================== --- lua/lvm.c a7ba54085b2d7755938c1db9c57e2fecab3058b1 +++ lua/lvm.c b3b742dd83254cb68fdd3010af2dae9fc74c52c1 @@ -321,15 +321,15 @@ luaG_concaterror(L, top-2, top-1); } else if (tsvalue(top-1)->tsv.len > 0) { /* if len=0, do nothing */ /* at least two string values; get as many as possible */ - lu_mem tl = cast(lu_mem, tsvalue(top-1)->tsv.len) + - cast(lu_mem, tsvalue(top-2)->tsv.len); + size_t tl = tsvalue(top-1)->tsv.len; char *buffer; int i; - while (n < total && tostring(L, top-n-1)) { /* collect total length */ - tl += tsvalue(top-n-1)->tsv.len; - n++; + /* collect total length */ + for (n = 1; n < total && tostring(L, top-n-1); n++) { + size_t l = tsvalue(top-n-1)->tsv.len; + if (l >= MAX_SIZET - tl) luaG_runerror(L, "string length overflow"); + tl += l; } - if (tl > MAX_SIZET) luaG_runerror(L, "string size overflow"); buffer = luaZ_openspace(L, &G(L)->buff, tl); tl = 0; for (i=n; i>0; i--) { /* concat all strings */ ======================================================================== --- win32/fs.cc 9ce58de1f6f841bb8bd66a3f99d465978a92df9f +++ win32/fs.cc 6cf4bc46e555a714ee4f6ed96e8d266b546eb575 @@ -141,8 +141,9 @@ static MoveFileExFun MoveFileEx = 0; if (MoveFileEx == 0) { HMODULE hModule = LoadLibrary("kernel32"); - MoveFileEx = reinterpret_cast - (GetProcAddress(hModule, "MoveFileExA")); + if (hModule) + MoveFileEx = reinterpret_cast + (GetProcAddress(hModule, "MoveFileExA")); if (MoveFileEx) L(F("using MoveFileEx for renames")); }