From Evan Huus:
authoretxrab <etxrab@f5534014-38df-0310-8fa8-9805f1628bb7>
Mon, 9 Jul 2012 01:56:27 +0000 (01:56 +0000)
committeretxrab <etxrab@f5534014-38df-0310-8fa8-9805f1628bb7>
Mon, 9 Jul 2012 01:56:27 +0000 (01:56 +0000)
Fix leaks

- don't g_strdup a string just to use it in a g_strdup_printf
- clean up properly in error cases in lua bindings
- misc. other missing g_free() calls
- one missing fclose() in the new 80211_utils

https://bugs.wireshark.org/bugzilla/show_bug.cgi?id=7454

git-svn-id: http://anonsvn.wireshark.org/wireshark/trunk@43617 f5534014-38df-0310-8fa8-9805f1628bb7

epan/filesystem.c
epan/wslua/wslua_proto.c
mkcap.c
ui/cli/tap-rtp.c
ui/gtk/main_menubar.c
ui/gtk/proto_hier_stats_dlg.c
ws80211_utils.c

index 8c10cef59e8f3b2669ff9d9cce6c37a92a176fbb..6cfdd5441d79b50216af58aee9788cf41b81a8d9 100644 (file)
@@ -1053,13 +1053,10 @@ get_persconffile_dir_no_profile(void)
          */
         pwd = getpwuid(getuid());
         if (pwd != NULL) {
-            /*
-             * This is cached, so we don't need to worry
-             * about allocating multiple ones of them.
-             */
-            homedir = g_strdup(pwd->pw_dir);
-        } else
+            homedir = pwd->pw_dir;
+        } else {
             homedir = "/tmp";
+        }
     }
     persconffile_dir = g_strdup_printf("%s" G_DIR_SEPARATOR_S "%s", homedir, PF_DIR);
 #endif
index a345ccebe5c0c49af649f36e5c77a18cb0782bf3..db1c3a92a04349e9962631351aab3cd6b8559230 100644 (file)
@@ -618,12 +618,18 @@ WSLUA_CONSTRUCTOR ProtoField_new(lua_State* L) { /* Creates a new field to be us
     f->type = get_ftenum(luaL_checkstring(L,WSLUA_ARG_ProtoField_new_TYPE));
 
     /*XXX do it better*/
-    if (f->type == FT_NONE)
+    if (f->type == FT_NONE) {
+        g_free(f->name);
+        g_free(f->abbr);
+        g_free(f);
         WSLUA_ARG_ERROR(ProtoField_new,TYPE,"invalid ftypes");
+    }
 
     if (proto_check_field_name(f->abbr)) {
-      WSLUA_ARG_ERROR(ProtoField_new,ABBR,"Invalid char in abbrev");
-      return 0;
+        g_free(f->name);
+        g_free(f->abbr);
+        g_free(f);
+        WSLUA_ARG_ERROR(ProtoField_new,ABBR,"Invalid char in abbrev");
     }
 
     if (! lua_isnil(L,WSLUA_OPTARG_ProtoField_new_VOIDSTRING) ) {
@@ -639,6 +645,8 @@ WSLUA_CONSTRUCTOR ProtoField_new(lua_State* L) { /* Creates a new field to be us
         } else if (tfs) {
             f->vs = TFS(tfs);
         } else {
+            g_free(f->name);
+            g_free(f->abbr);
             g_free(f);
             return 0;
         }
diff --git a/mkcap.c b/mkcap.c
index f3bc42e69cc123b546f10a909154a5e222654bf6..5f9515971a1269598f1e69cad06135c86bd2e202 100644 (file)
--- a/mkcap.c
+++ b/mkcap.c
@@ -571,8 +571,8 @@ process_drop_list(char *drop_list)
     else
       drops[commas / 2].drop_seg_start = num;
   }
-
   
+  g_free(save);
 
 }
 
index a2361313f54893288388422ba625add2c8d311ce..20da2283bc50ff8bf0207aeed655bd7ee3f01507 100644 (file)
@@ -122,6 +122,7 @@ rtp_streams_stat_draw(void *arg _U_)
 
        list = g_list_next(list);
 
+       g_free(payload_type);
 
     }
 
index 546b729a06713e1d5c8ab1d09c3af61ab712dad8..1e3ffd8c543fa151ba1787494d6a4f4fa7e20e2e 100644 (file)
@@ -4205,6 +4205,7 @@ add_menu_recent_capture_file_absolute(gchar *cf_name) {
     submenu_recent_files = gtk_ui_manager_get_widget(ui_manager_main_menubar, MENU_RECENT_FILES_PATH);
     if(!submenu_recent_files){
         g_warning("add_menu_recent_capture_file_absolute: No submenu_recent_files found, path= MENU_RECENT_FILES_PATH");
+        g_free(normalized_cf_name);
         return;
     }
     recent_files_list = g_object_get_data(G_OBJECT(submenu_recent_files), "recent-files-list");
index ea70c9836582ef75aa0caef5fb3429db1e4d0d21..1982823eb11359b75a17a0113ea579bb923053d5 100644 (file)
@@ -104,6 +104,7 @@ proto_hier_select_filter_cb(GtkWidget *widget _U_, gpointer callback_data _U_, g
             str = g_strdup_printf("%s and %s", strtmp, filter);
         } else {
             simple_dialog(ESD_TYPE_ERROR, ESD_BTN_OK, "Could not acquire information to build a filter!\nTry expanding or choosing another item.");
+            g_free(strtmp);
             return;
         }
 
index 5131f03bd796f3f1d321454940e53c997b6b6eab..8dde38e16ed48696dafae5bd4fa090a3adb0cdba 100644 (file)
@@ -207,9 +207,8 @@ static int get_phys_handler(struct nl_msg *msg, void *arg)
        iface->channel_types = 1 << WS80211_CHAN_NO_HT;
 
        if (tb_msg[NL80211_ATTR_WIPHY_NAME]) {
-               char *phyname;
-               phyname = g_strdup(nla_get_string(tb_msg[NL80211_ATTR_WIPHY_NAME]));
-               iface->ifname = g_strdup_printf("%s.mon", phyname);
+               iface->ifname = g_strdup_printf("%s.mon",
+                nla_get_string(tb_msg[NL80211_ATTR_WIPHY_NAME]));
        }
 
        nla_for_each_nested(nl_band, tb_msg[NL80211_ATTR_WIPHY_BANDS], rem_band) {
@@ -420,6 +419,7 @@ static int ws80211_populate_devices(GArray *interfaces)
                ret = fgets(line, sizeof(line), fh);
                if (ret == NULL) {
                        fprintf(stderr, "Error parsing /proc/net/dev");
+                       fclose(fh);
                        return -1;
                }
        }