From acde58d3116a9dc9875b9055d0f75f0fda0f85e7 Mon Sep 17 00:00:00 2001 From: Alex Szpakowski Date: Sun, 21 Aug 2016 11:22:21 -0300 Subject: [PATCH] Improved the error message when nil is passed as the first argument to love.image.newImageData (resolves issue #1205). --- src/modules/filesystem/wrap_Filesystem.cpp | 5 ++++ src/modules/filesystem/wrap_Filesystem.h | 1 + src/modules/image/wrap_Image.cpp | 27 +++++++++++++--------- 3 files changed, 22 insertions(+), 11 deletions(-) diff --git a/src/modules/filesystem/wrap_Filesystem.cpp b/src/modules/filesystem/wrap_Filesystem.cpp index 0f9302c22..a1e0b1773 100644 --- a/src/modules/filesystem/wrap_Filesystem.cpp +++ b/src/modules/filesystem/wrap_Filesystem.cpp @@ -218,6 +218,11 @@ FileData *luax_getfiledata(lua_State *L, int idx) return data; } +bool luax_cangetfiledata(lua_State *L, int idx) +{ + return lua_isstring(L, idx) || luax_istype(L, idx, FILESYSTEM_FILE_ID) || luax_istype(L, idx, FILESYSTEM_FILE_DATA_ID); +} + int w_newFileData(lua_State *L) { // Single argument: treat as filepath or File. diff --git a/src/modules/filesystem/wrap_Filesystem.h b/src/modules/filesystem/wrap_Filesystem.h index 0b27b3261..a010fd772 100644 --- a/src/modules/filesystem/wrap_Filesystem.h +++ b/src/modules/filesystem/wrap_Filesystem.h @@ -39,6 +39,7 @@ namespace filesystem * May trigger a Lua error. **/ FileData *luax_getfiledata(lua_State *L, int idx); +bool luax_cangetfiledata(lua_State *L, int idx); File *luax_getfile(lua_State *L, int idx); bool hack_setupWriteDirectory(); diff --git a/src/modules/image/wrap_Image.cpp b/src/modules/image/wrap_Image.cpp index 8a86879ca..e8c0f1619 100644 --- a/src/modules/image/wrap_Image.cpp +++ b/src/modules/image/wrap_Image.cpp @@ -68,19 +68,24 @@ int w_newImageData(lua_State *L) t->release(); return 1; } + else if (filesystem::luax_cangetfiledata(L, 1)) // Case 2: File(Data). + { + filesystem::FileData *data = love::filesystem::luax_getfiledata(L, 1); - // Case 2: File(Data). - love::filesystem::FileData *data = love::filesystem::luax_getfiledata(L, 1); + ImageData *t = nullptr; + luax_catchexcept(L, + [&]() { t = instance()->newImageData(data); }, + [&](bool) { data->release(); } + ); - ImageData *t = nullptr; - luax_catchexcept(L, - [&]() { t = instance()->newImageData(data); }, - [&](bool) { data->release(); } - ); - - luax_pushtype(L, IMAGE_IMAGE_DATA_ID, t); - t->release(); - return 1; + luax_pushtype(L, IMAGE_IMAGE_DATA_ID, t); + t->release(); + return 1; + } + else + { + return luax_typerror(L, 1, "value"); + } } int w_newCompressedData(lua_State *L)