Fix love.filesystem.newFileData crashing when an invalid filename is used.

This commit is contained in:
slime
2022-10-25 17:08:10 -03:00
parent 4862d95687
commit 79c879a6b1
+12 -7
View File
@@ -305,10 +305,11 @@ File *luax_getfile(lua_State *L, int idx)
return file;
}
FileData *luax_getfiledata(lua_State *L, int idx, bool ioerror)
FileData *luax_getfiledata(lua_State *L, int idx, bool ioerror, int &nresults)
{
FileData *data = nullptr;
File *file = nullptr;
nresults = 0;
if (lua_isstring(L, idx) || luax_istype(L, idx, File::type))
{
@@ -322,7 +323,7 @@ FileData *luax_getfiledata(lua_State *L, int idx, bool ioerror)
if (!data && !file)
{
luaL_argerror(L, idx, "filename, File, or FileData expected");
nresults = luaL_argerror(L, idx, "filename, File, or FileData expected");
return nullptr; // Never reached.
}
else if (file && !data)
@@ -335,10 +336,10 @@ FileData *luax_getfiledata(lua_State *L, int idx, bool ioerror)
{
file->release();
if (ioerror)
luax_ioError(L, "%s", e.what());
nresults = luax_ioError(L, "%s", e.what());
else
luaL_error(L, "%s", e.what());
return nullptr; // Never reached.
nresults = luaL_error(L, "%s", e.what());
return nullptr; // Never reached if ioerror is false.
}
file->release();
@@ -349,7 +350,8 @@ FileData *luax_getfiledata(lua_State *L, int idx, bool ioerror)
FileData *luax_getfiledata(lua_State *L, int idx)
{
return luax_getfiledata(L, idx, false);
int nresults = 0;
return luax_getfiledata(L, idx, false, nresults);
}
Data *luax_getdata(lua_State *L, int idx)
@@ -404,7 +406,10 @@ int w_newFileData(lua_State *L)
// Single argument: treat as filepath or File.
if (lua_gettop(L) == 1)
{
FileData *data = luax_getfiledata(L, 1, true);
int nresults = 0;
FileData *data = luax_getfiledata(L, 1, true, nresults);
if (data == nullptr)
return nresults;
luax_pushtype(L, data);
data->release();
return 1;