diff options
author | Roberto Ierusalimschy <roberto@inf.puc-rio.br> | 2020-07-20 15:55:18 -0300 |
---|---|---|
committer | Roberto Ierusalimschy <roberto@inf.puc-rio.br> | 2020-07-20 15:55:18 -0300 |
commit | 092f66fb0590f543ee5c45156ddabaddc7222a92 (patch) | |
tree | e156eab1b64ebfc0e110206e1a29e2e05c8903c3 | |
parent | e7411fab800e2cfa810a1ba296356532eabdde40 (diff) | |
download | lua-092f66fb0590f543ee5c45156ddabaddc7222a92.tar.gz lua-092f66fb0590f543ee5c45156ddabaddc7222a92.tar.bz2 lua-092f66fb0590f543ee5c45156ddabaddc7222a92.zip |
Fixed bug: invalid mode can crash 'io.popen'
-rw-r--r-- | liolib.c | 2 |
1 files changed, 2 insertions, 0 deletions
@@ -277,6 +277,8 @@ static int io_popen (lua_State *L) { | |||
277 | const char *filename = luaL_checkstring(L, 1); | 277 | const char *filename = luaL_checkstring(L, 1); |
278 | const char *mode = luaL_optstring(L, 2, "r"); | 278 | const char *mode = luaL_optstring(L, 2, "r"); |
279 | LStream *p = newprefile(L); | 279 | LStream *p = newprefile(L); |
280 | luaL_argcheck(L, ((mode[0] == 'r' || mode[0] == 'w') && mode[1] == '\0'), | ||
281 | 2, "invalid mode"); | ||
280 | p->f = l_popen(L, filename, mode); | 282 | p->f = l_popen(L, filename, mode); |
281 | p->closef = &io_pclose; | 283 | p->closef = &io_pclose; |
282 | return (p->f == NULL) ? luaL_fileresult(L, 0, filename) : 1; | 284 | return (p->f == NULL) ? luaL_fileresult(L, 0, filename) : 1; |