]> granicus.if.org Git - handbrake/commitdiff
LinGui: fix use of freed memory in "File" menu action
authorJohn Stebbins <jstebbins.hb@gmail.com>
Wed, 5 Jul 2017 17:57:30 +0000 (10:57 -0700)
committerJohn Stebbins <jstebbins.hb@gmail.com>
Wed, 5 Jul 2017 17:58:10 +0000 (10:58 -0700)
Fixes https://github.com/HandBrake/HandBrake/issues/807

gtk/src/callbacks.c

index 2ee6431f518efb61d4dc4b428e9ec13a7b87df6b..89aa9740cc7d87bf50de47106b01226f5764fc8c 100644 (file)
@@ -1387,6 +1387,9 @@ do_source_dialog(GtkButton *button, gboolean single, signal_user_data_t *ud)
                 title_id = ghb_dict_get_int(ud->settings, "single_title");
             else
                 title_id = 0;
+            // ghb_do_scan replaces "scan_source" key in dict, so we must
+            // be finished with sourcename before calling ghb_do_scan
+            // since the memory it references will be freed
             if (strcmp(sourcename, filename) != 0)
             {
                 ghb_dict_set_string(ud->prefs, "default_source", filename);
@@ -1426,15 +1429,18 @@ dvd_source_activate_cb(GtkWidget *widget, signal_user_data_t *ud)
     const gchar *filename;
     const gchar *sourcename;
 
+    // ghb_do_scan replaces "scan_source" key in dict, so we must
+    // be finished with sourcename before calling ghb_do_scan
+    // since the memory it references will be freed
     sourcename = ghb_dict_get_string(ud->globals, "scan_source");
     filename = gtk_buildable_get_name(GTK_BUILDABLE(widget));
-    ghb_do_scan(ud, filename, 0, TRUE);
     if (strcmp(sourcename, filename) != 0)
     {
         ghb_dict_set_string(ud->prefs, "default_source", filename);
         ghb_pref_save(ud->prefs, "default_source");
         ghb_dvd_set_current(filename, ud);
     }
+    ghb_do_scan(ud, filename, 0, TRUE);
 }
 
 void