diff --git a/iolib.c b/iolib.c index fb2c3b4b..bb352009 100644 --- a/iolib.c +++ b/iolib.c @@ -115,8 +115,14 @@ static void io_read (void) int c = NEED_OTHER; luaI_addchar(0); while (*p) { - if (*p == '{' || *p == '}') { - inskip = (*p == '{'); + if (*p == '{') { + inskip++; + p++; + } + else if (*p == '}') { + if (inskip == 0) + lua_error("unbalanced `{...}' in read pattern"); + inskip--; p++; } else { @@ -125,7 +131,7 @@ static void io_read (void) if (c == NEED_OTHER) c = getc(lua_infile); m = (c == EOF) ? 0 : singlematch((char)c, p); if (m) { - if (!inskip) luaI_addchar(c); + if (inskip == 0) luaI_addchar(c); c = NEED_OTHER; } switch (*ep) {