aboutsummaryrefslogtreecommitdiffstats
path: root/epan/wslua
diff options
context:
space:
mode:
authorStig Bjørlykke <stig@bjorlykke.org>2016-04-09 14:30:07 +0200
committerStig Bjørlykke <stig@bjorlykke.org>2016-04-11 17:59:11 +0000
commit5112d1ec27e0b37fe4194fbc627877e28c027261 (patch)
treeeedf66594271057d7b93fa552af298e972d13647 /epan/wslua
parent76adb4c044fca4b56346a01d655a04bf56fe770c (diff)
Lua: Fix add and remove Fields when reload Lua plugins
Reset wslua_dfilter and remove the Field tap_listener when reloading plugins. Check for tap listeners in rescan_packets() after ws_epan_new() because Lua may register the Lua field tap when adding Fields. Bug: 12328 Change-Id: Ibbd8339033132c6f3b61d7e9c9ced9ed2b9affec Reviewed-on: https://code.wireshark.org/review/14871 Petri-Dish: Stig Bjørlykke <stig@bjorlykke.org> Reviewed-by: Peter Wu <peter@lekensteyn.nl> Tested-by: Petri Dish Buildbot <buildbot-no-reply@wireshark.org> Reviewed-by: Stig Bjørlykke <stig@bjorlykke.org>
Diffstat (limited to 'epan/wslua')
-rw-r--r--epan/wslua/init_wslua.c1
-rw-r--r--epan/wslua/wslua.h1
-rw-r--r--epan/wslua/wslua_field.c31
3 files changed, 20 insertions, 13 deletions
diff --git a/epan/wslua/init_wslua.c b/epan/wslua/init_wslua.c
index 4a8ff1fb44..cd71e2a5d6 100644
--- a/epan/wslua/init_wslua.c
+++ b/epan/wslua/init_wslua.c
@@ -991,6 +991,7 @@ void wslua_reload_plugins (register_cb cb, gpointer client_data) {
wslua_deregister_protocols(L);
wslua_deregister_dissector_tables(L);
wslua_deregister_listeners(L);
+ wslua_deregister_fields(L);
wslua_deregister_filehandlers(L);
wslua_deregister_menus();
wslua_clear_plugin_list();
diff --git a/epan/wslua/wslua.h b/epan/wslua/wslua.h
index aee0abfda8..fb067a2f38 100644
--- a/epan/wslua/wslua.h
+++ b/epan/wslua/wslua.h
@@ -787,6 +787,7 @@ extern int wslua_deregister_heur_dissectors(lua_State* L);
extern int wslua_deregister_protocols(lua_State* L);
extern int wslua_deregister_dissector_tables(lua_State* L);
extern int wslua_deregister_listeners(lua_State* L);
+extern int wslua_deregister_fields(lua_State* L);
extern int wslua_deregister_filehandlers(lua_State* L);
extern void wslua_deregister_menus(void);
diff --git a/epan/wslua/wslua_field.c b/epan/wslua/wslua_field.c
index 7a52585952..0dc79760a3 100644
--- a/epan/wslua/wslua_field.c
+++ b/epan/wslua/wslua_field.c
@@ -557,10 +557,10 @@ gboolean wslua_has_field_extractors(void) {
* after the fields are primed.
*/
+static gboolean fake_tap = FALSE;
void lua_prime_all_fields(proto_tree* tree _U_) {
GString* fake_tap_filter = g_string_new("frame");
guint i;
- static gboolean fake_tap = FALSE;
gchar *err_msg;
for(i=0; i < wanted_fields->len; i++) {
@@ -596,19 +596,10 @@ void lua_prime_all_fields(proto_tree* tree _U_) {
if (error) {
report_failure("while registering lua_fake_tap:\n%s",error->str);
g_string_free(error,TRUE);
- } else {
- if (wslua_dfilter) {
- dfilter_free(wslua_dfilter);
- wslua_dfilter = NULL;
- }
- if (!dfilter_compile(fake_tap_filter->str, &wslua_dfilter, &err_msg)) {
- report_failure("while compiling dfilter \"%s\" for wslua: %s", fake_tap_filter->str, err_msg);
- g_free(err_msg);
- }
+ } else if (!dfilter_compile(fake_tap_filter->str, &wslua_dfilter, &err_msg)) {
+ report_failure("while compiling dfilter \"%s\" for wslua: %s", fake_tap_filter->str, err_msg);
+ g_free(err_msg);
}
- } else if (fake_tap) {
- remove_tap_listener(&fake_tap);
- fake_tap = FALSE;
}
g_string_free(fake_tap_filter, TRUE);
}
@@ -819,6 +810,20 @@ int Field_register(lua_State* L) {
return 0;
}
+int wslua_deregister_fields(lua_State* L _U_) {
+ if (wslua_dfilter) {
+ dfilter_free(wslua_dfilter);
+ wslua_dfilter = NULL;
+ }
+
+ if (fake_tap) {
+ remove_tap_listener(&fake_tap);
+ fake_tap = FALSE;
+ }
+
+ return 0;
+}
+
/*
* Editor modelines - http://www.wireshark.org/tools/modelines.html
*