Limit number of arguments given to io.lines() and fp:lines().

master
Mike Pall 2015-07-10 03:42:51 +02:00
parent 7f454aed82
commit 575bfe5028
1 changed files with 11 additions and 4 deletions

View File

@ -278,6 +278,15 @@ static int io_file_iter(lua_State *L)
return n;
}
static int io_file_lines(lua_State *L)
{
int n = (int)(L->top - L->base);
if (n > LJ_MAX_UPVAL)
lj_err_caller(L, LJ_ERR_UNPACK);
lua_pushcclosure(L, io_file_iter, n);
return 1;
}
/* -- I/O file methods ---------------------------------------------------- */
#define LJLIB_MODULE_io_method
@ -361,8 +370,7 @@ LJLIB_CF(io_method_setvbuf)
LJLIB_CF(io_method_lines)
{
io_tofile(L);
lua_pushcclosure(L, io_file_iter, (int)(L->top - L->base));
return 1;
return io_file_lines(L);
}
LJLIB_CF(io_method___gc)
@ -492,8 +500,7 @@ LJLIB_CF(io_lines)
} else { /* io.lines() iterates over stdin. */
setudataV(L, L->base, IOSTDF_UD(L, GCROOT_IO_INPUT));
}
lua_pushcclosure(L, io_file_iter, (int)(L->top - L->base));
return 1;
return io_file_lines(L);
}
LJLIB_CF(io_type)