diff options
author | Bill Meier <wmeier@newsguy.com> | 2008-02-29 01:49:31 +0000 |
---|---|---|
committer | Bill Meier <wmeier@newsguy.com> | 2008-02-29 01:49:31 +0000 |
commit | 030c8c6f3ea0c56d4f8c17bbbcdea6a6817be10f (patch) | |
tree | d192919ff96e3ebb8d2c89c2efa6371009b86e83 /epan | |
parent | c51459585d66c49a91f31804dd9ce5fbf80b12df (diff) |
Fix wireshark/tshark crash when initializing lua (using init.lua, etc).
Essentially: A small cleanup of SVN 24479.
(Fortunately the 0.99.8 release does not have this issue).
Also: add some lines of (what appears to be) missing code.
svn path=/trunk/; revision=24500
Diffstat (limited to 'epan')
-rw-r--r-- | epan/wslua/wslua_util.c | 16 |
1 files changed, 11 insertions, 5 deletions
diff --git a/epan/wslua/wslua_util.c b/epan/wslua/wslua_util.c index 7b38eb3e17..ed4a6fd2e5 100644 --- a/epan/wslua/wslua_util.c +++ b/epan/wslua/wslua_util.c @@ -144,9 +144,10 @@ WSLUA_FUNCTION wslua_debug( lua_State* L ) { /* Will add a log entry with debug return 0; } -/* The returned filename was g_malloc()'d so the caller must free it */ -char* wslua_get_actual_filename(const char* fname) { - static char fname_clean[256]; +/* The returned filename is g_malloc()'d so the caller must free it */ +/* except when NULL is returned if file doesn't exist */ +static char* wslua_get_actual_filename(const char* fname) { + char fname_clean[256]; char* f; char* filename; @@ -163,7 +164,7 @@ char* wslua_get_actual_filename(const char* fname) { } if ( file_exists(fname_clean) ) { - return fname_clean; + return g_strdup(fname_clean); } filename = get_persconffile_path(fname_clean,FALSE,FALSE); @@ -174,8 +175,12 @@ char* wslua_get_actual_filename(const char* fname) { g_free(filename); filename = get_datafile_path(fname_clean); + if ( file_exists(filename) ) { + return filename; + } + g_free(filename); - return filename; + return NULL; } WSLUA_FUNCTION wslua_loadfile(lua_State* L) { @@ -256,6 +261,7 @@ WSLUA_CONSTRUCTOR Dir_open(lua_State* L) { if (!dirname) WSLUA_ARG_ERROR(Dir_open,PATHNAME,"must be a string"); dirname_clean = wslua_get_actual_filename(dirname); + if (!dirname_clean) WSLUA_ARG_ERROR(Dir_open,PATHNAME,"directory does not exist"); if (!test_for_directory(dirname_clean)) WSLUA_ARG_ERROR(Dir_open, PATHNAME, "must be a directory"); |