diff options
author | Hadriel Kaplan <hadrielk@yahoo.com> | 2014-03-08 18:57:04 -0500 |
---|---|---|
committer | Alexis La Goutte <alexis.lagoutte@gmail.com> | 2014-03-09 09:57:35 +0000 |
commit | 8a9bba861ae207a163c58711993443b96beb48e9 (patch) | |
tree | 39e42afad11e933bbccff16b5df93e5a9d7fe13a /epan/wslua | |
parent | ff6cc9b0cba3096face296f9dba118163b7dc0cc (diff) |
Fix Bug 9853: 'Lua: trying to get/access a Preference before its registered causes a segfault'
Accessing a pref before it's registered causes a segfault, because prefs_p->next
is not being checked for NULL in wslua_proto.c:Prefs__index().
Change-Id: I270978ddb9238a9e8d2c533a96fc01ee0df385c7
Reviewed-on: https://code.wireshark.org/review/563
Reviewed-by: Evan Huus <eapache@gmail.com>
Reviewed-by: Alexis La Goutte <alexis.lagoutte@gmail.com>
Diffstat (limited to 'epan/wslua')
-rw-r--r-- | epan/wslua/wslua_proto.c | 23 |
1 files changed, 14 insertions, 9 deletions
diff --git a/epan/wslua/wslua_proto.c b/epan/wslua/wslua_proto.c index a7716d9b19..1f1e320cc9 100644 --- a/epan/wslua/wslua_proto.c +++ b/epan/wslua/wslua_proto.c @@ -305,18 +305,18 @@ WSLUA_METAMETHOD Prefs__newindex(lua_State* L) { luaL_error(L,"a preference named %s exists already",name); return 0; } - /* + /* * Make sure that only lower-case ASCII letters, numbers, * underscores, and dots appear in the preference name. - */ - for (c = name; *c != '\0'; c++) { - if (!isascii((guchar)*c) || - (!islower((guchar)*c) && !isdigit((guchar)*c) && *c != '_' && *c != '.')) - { - luaL_error(L,"illegal preference name \"%s\", only lower-case ASCII letters, numbers, underscores and dots may be used",name); - return 0; + */ + for (c = name; *c != '\0'; c++) { + if (!isascii((guchar)*c) || + (!islower((guchar)*c) && !isdigit((guchar)*c) && *c != '_' && *c != '.')) + { + luaL_error(L,"illegal preference name \"%s\", only lower-case ASCII letters, numbers, underscores and dots may be used",name); + return 0; + } } - } if ( ! p->next) { p->next = pref; @@ -400,6 +400,11 @@ WSLUA_METAMETHOD Prefs__index(lua_State* L) { if (! ( name && prefs_p ) ) return 0; + if (!prefs_p->next) { + luaL_error(L,"No preference is registered yet"); + return 0; + } + prefs_p = prefs_p->next; do { |