aboutsummaryrefslogtreecommitdiffstats
path: root/epan/wslua/wslua_proto.c
diff options
context:
space:
mode:
authorHadriel Kaplan <hadrielk@yahoo.com>2014-03-08 18:57:04 -0500
committerAlexis La Goutte <alexis.lagoutte@gmail.com>2014-03-09 09:57:35 +0000
commit8a9bba861ae207a163c58711993443b96beb48e9 (patch)
tree39e42afad11e933bbccff16b5df93e5a9d7fe13a /epan/wslua/wslua_proto.c
parentff6cc9b0cba3096face296f9dba118163b7dc0cc (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/wslua_proto.c')
-rw-r--r--epan/wslua/wslua_proto.c23
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 {