From 0aae22d523c148200d6ed17b7503f17fd1617f44 Mon Sep 17 00:00:00 2001 From: "bart@bart" Date: Wed, 26 Aug 2009 17:20:23 +0200 Subject: [PATCH] Fixed PHYSFS_fileLength segfault on non-existant files by checking if a file exists when a file object is created --- src/modules/filesystem/physfs/Filesystem.cpp | 2 ++ src/modules/filesystem/physfs/wrap_Filesystem.cpp | 12 ++++++++++-- 2 files changed, 12 insertions(+), 2 deletions(-) diff --git a/src/modules/filesystem/physfs/Filesystem.cpp b/src/modules/filesystem/physfs/Filesystem.cpp index 03845890c..133f2d193 100644 --- a/src/modules/filesystem/physfs/Filesystem.cpp +++ b/src/modules/filesystem/physfs/Filesystem.cpp @@ -142,6 +142,8 @@ namespace physfs File * Filesystem::newFile(const char *filename) { + if (!PHYSFS_exists(filename)) + throw Exception("File %s doesn't exist", filename); return new File(filename); } diff --git a/src/modules/filesystem/physfs/wrap_Filesystem.cpp b/src/modules/filesystem/physfs/wrap_Filesystem.cpp index a61cb9240..1d41e57c1 100644 --- a/src/modules/filesystem/physfs/wrap_Filesystem.cpp +++ b/src/modules/filesystem/physfs/wrap_Filesystem.cpp @@ -75,7 +75,15 @@ namespace physfs int w_newFile(lua_State * L) { const char * filename = luaL_checkstring(L, 1); - File * t = instance->newFile(filename); + File * t; + try + { + t = instance->newFile(filename); + } + catch(Exception e) + { + return luaL_error(L, e.what()); + } luax_newtype(L, "File", FILESYSTEM_FILE_T, (void*)t); return 1; } @@ -274,4 +282,4 @@ namespace physfs } // physfs } // filesystem -} // love \ No newline at end of file +} // love