aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRoberto Ierusalimschy <roberto@inf.puc-rio.br>2010-05-14 12:34:57 -0300
committerRoberto Ierusalimschy <roberto@inf.puc-rio.br>2010-05-14 12:34:57 -0300
commite99e9a94732dcb7407777b724fb61e548d51ba33 (patch)
tree56e057e8780781c9deb4830ed688fc560f551a66
parentf35ac38e1df7e3577bc7464c8d4d09f97f892a97 (diff)
downloadlua-e99e9a94732dcb7407777b724fb61e548d51ba33.tar.gz
lua-e99e9a94732dcb7407777b724fb61e548d51ba33.tar.bz2
lua-e99e9a94732dcb7407777b724fb61e548d51ba33.zip
patches for last two bugs (string.format and io.read)
-rw-r--r--bugs47
1 files changed, 42 insertions, 5 deletions
diff --git a/bugs b/bugs
index c2fd3ecd..dd9f7c55 100644
--- a/bugs
+++ b/bugs
@@ -1880,8 +1880,8 @@ patch = [[
1880+++ lundump.c 2008/04/04 19:51:41 2.7.1.4 1880+++ lundump.c 2008/04/04 19:51:41 2.7.1.4
1881@@ -1,5 +1,5 @@ 1881@@ -1,5 +1,5 @@
1882 /* 1882 /*
1883-** $Id: bugs,v 1.106 2010/04/19 16:39:25 roberto Exp roberto $ 1883-** $Id: bugs,v 1.107 2010/04/19 18:04:58 roberto Exp roberto $
1884+** $Id: bugs,v 1.106 2010/04/19 16:39:25 roberto Exp roberto $ 1884+** $Id: bugs,v 1.107 2010/04/19 18:04:58 roberto Exp roberto $
1885 ** load precompiled Lua chunks 1885 ** load precompiled Lua chunks
1886 ** See Copyright Notice in lua.h 1886 ** See Copyright Notice in lua.h
1887 */ 1887 */
@@ -2265,7 +2265,29 @@ since = [[5.0]],
2265example = [[ 2265example = [[
2266x = string.rep("x", 10000) .. "%d" 2266x = string.rep("x", 10000) .. "%d"
2267print(string.format(x)) -- gives wrong error message 2267print(string.format(x)) -- gives wrong error message
2268patch = nil 2268]],
2269patch = [[
2270--- lstrlib.c 2008/07/11 17:27:21 1.132.1.4
2271+++ lstrlib.c 2010/05/14 15:12:53
2272@@ -754,6 +754,7 @@
2273
2274
2275 static int str_format (lua_State *L) {
2276+ int top = lua_gettop(L);
2277 int arg = 1;
2278 size_t sfl;
2279 const char *strfrmt = luaL_checklstring(L, arg, &sfl);
2280@@ -768,7 +769,8 @@
2281 else { /* format item */
2282 char form[MAX_FORMAT]; /* to store the format (`%...') */
2283 char buff[MAX_ITEM]; /* to store the formatted item */
2284- arg++;
2285+ if (++arg > top)
2286+ luaL_argerror(L, arg, "no value");
2287 strfrmt = scanformat(L, strfrmt, form);
2288 switch (*strfrmt++) {
2289 case 'c': {
2290]]
2269} 2291}
2270 2292
2271Bug{ 2293Bug{
@@ -2273,9 +2295,24 @@ what = [['io.read(op, "*n")' may return garbage if second read fails]],
2273report = [[Roberto I., 2010/04/12]], 2295report = [[Roberto I., 2010/04/12]],
2274since = [[5.0]], 2296since = [[5.0]],
2275example = [[ 2297example = [[
2276print(io.read("*n", "*n") --<< enter "10 hi" 2298print(io.read("*n", "*n")) --<< enter "10 hi"
2277--> file (0x884420) nil 2299--> file (0x884420) nil
2278]], 2300]],
2279patch = nil 2301patch = [[
2302--- liolib.c 2008/01/18 17:47:43 2.73.1.3
2303+++ liolib.c 2010/05/14 15:29:29
2304@@ -276,7 +276,10 @@
2305 lua_pushnumber(L, d);
2306 return 1;
2307 }
2308- else return 0; /* read fails */
2309+ else {
2310+ lua_pushnil(L); /* "result" to be removed */
2311+ return 0; /* read fails */
2312+ }
2313 }
2314
2315
2316]]
2280} 2317}
2281 2318