From 8a9bba861ae207a163c58711993443b96beb48e9 Mon Sep 17 00:00:00 2001 From: Hadriel Kaplan Date: Sat, 8 Mar 2014 18:57:04 -0500 Subject: 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 Reviewed-by: Alexis La Goutte --- epan/wslua/wslua_proto.c | 23 ++++++++++++++--------- 1 file changed, 14 insertions(+), 9 deletions(-) (limited to 'epan/wslua/wslua_proto.c') 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 { -- cgit v1.2.3