From 2f34f262038de32c4a39cf11a164551cd0633773 Mon Sep 17 00:00:00 2001 From: Jaap Keuter Date: Mon, 19 Mar 2018 22:46:49 +0100 Subject: OID name resolv: Fix MIB/PIB path presentations oids.c: Sort out libsmi init, add user paths once. Qt, About WS: Stop memory leak of MIB/PIB paths. GTK, About WS: Allow for 20 individual paths. tshark, folders: init before getting paths, allow 20 individual. Bug: 14539 Change-Id: I113ee2dd4394d553a16b256e66fd840eeeec78ef Signed-off-by: Jaap Keuter Reviewed-on: https://code.wireshark.org/review/26555 Tested-by: Petri Dish Buildbot Reviewed-by: Anders Broman --- epan/oids.c | 34 ++++++++++++++++++++-------------- 1 file changed, 20 insertions(+), 14 deletions(-) (limited to 'epan') diff --git a/epan/oids.c b/epan/oids.c index 28ea769d83..b30ed2d084 100644 --- a/epan/oids.c +++ b/epan/oids.c @@ -30,6 +30,7 @@ #ifdef HAVE_LIBSMI #include +static gboolean smi_init_done = FALSE; static gboolean oids_init_done = FALSE; static gboolean load_smi_modules = FALSE; static gboolean suppress_smi_errors = FALSE; @@ -533,14 +534,13 @@ static void register_mibs(void) { if (oids_init_done) { D(1,("Exiting register_mibs() to avoid double registration of MIBs proto.")); return; - } else { - oids_init_done = TRUE; } hfa = wmem_array_new(wmem_epan_scope(), sizeof(hf_register_info)); etta = g_array_new(FALSE,TRUE,sizeof(gint*)); smiInit(NULL); + smi_init_done = TRUE; smi_errors = g_string_new(""); smiSetErrorHandler(smi_error_handler); @@ -734,6 +734,8 @@ static void register_mibs(void) { proto_register_subtree_array((gint**)(void*)etta->data, etta->len); g_array_free(etta,TRUE); + + oids_init_done = TRUE; } #endif @@ -1263,10 +1265,9 @@ oid_get_default_mib_path(void) { if (!load_smi_modules) { D(1,("OID resolution not enabled")); - return path_str->str; + return g_string_free(path_str, FALSE); } #ifdef _WIN32 -#define PATH_SEPARATOR ";" path = get_datafile_path("snmp\\mibs"); g_string_append_printf(path_str, "%s;", path); g_free (path); @@ -1275,23 +1276,28 @@ oid_get_default_mib_path(void) { g_string_append_printf(path_str, "%s", path); g_free (path); #else -#define PATH_SEPARATOR ":" - path = smiGetPath(); g_string_append(path_str, "/usr/share/snmp/mibs"); + if (!smi_init_done) + smiInit(NULL); + path = smiGetPath(); if (strlen(path) > 0 ) { - g_string_append(path_str, PATH_SEPARATOR); + g_string_append(path_str, G_SEARCHPATH_SEPARATOR_S); + g_string_append_printf(path_str, "%s", path); } - g_string_append_printf(path_str, "%s", path); smi_free(path); -#endif - for(i=0;i