diff options
author | estade@chromium.org <estade@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2009-10-22 20:57:13 +0000 |
---|---|---|
committer | estade@chromium.org <estade@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2009-10-22 20:57:13 +0000 |
commit | fc2652479169e0cfda69fb58c8232ed32e86b706 (patch) | |
tree | 7dc9a849ffd5f48b2e05bec8479fe1a1c8f181be | |
parent | af958dd5f74817150f58d762a1b99f05e5d355a6 (diff) | |
download | chromium_src-fc2652479169e0cfda69fb58c8232ed32e86b706.zip chromium_src-fc2652479169e0cfda69fb58c8232ed32e86b706.tar.gz chromium_src-fc2652479169e0cfda69fb58c8232ed32e86b706.tar.bz2 |
Fix a couple gtk file chooser crashers.
BUG=25493
BUG=25490
Review URL: http://codereview.chromium.org/324002
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@29816 0039d316-1c4b-4281-b951-d872f2087c98
-rw-r--r-- | chrome/browser/gtk/dialogs_gtk.cc | 20 |
1 files changed, 13 insertions, 7 deletions
diff --git a/chrome/browser/gtk/dialogs_gtk.cc b/chrome/browser/gtk/dialogs_gtk.cc index 08b484f..8d88cd6 100644 --- a/chrome/browser/gtk/dialogs_gtk.cc +++ b/chrome/browser/gtk/dialogs_gtk.cc @@ -446,8 +446,10 @@ void SelectFileDialogImpl::RemoveParentForDialog(GtkWidget* dialog) { GtkWindow* parent = gtk_window_get_transient_for(GTK_WINDOW(dialog)); DCHECK(parent); std::set<GtkWindow*>::iterator iter = parents_.find(parent); - DCHECK(iter != parents_.end()); - parents_.erase(iter); + if (iter != parents_.end()) + parents_.erase(iter); + else + NOTREACHED(); } // static @@ -465,25 +467,29 @@ bool SelectFileDialogImpl::IsCancelResponse(gint response_id) { void SelectFileDialogImpl::OnSelectSingleFileDialogResponse( GtkWidget* dialog, gint response_id, SelectFileDialogImpl* dialog_impl) { - if (IsCancelResponse(response_id)) { + gchar* filename = gtk_file_chooser_get_filename(GTK_FILE_CHOOSER(dialog)); + + if (!filename || IsCancelResponse(response_id)) { dialog_impl->FileNotSelected(dialog); return; } - gchar* filename = gtk_file_chooser_get_filename(GTK_FILE_CHOOSER(dialog)); - dialog_impl->FileSelected(dialog, FilePath(filename)); + FilePath path(filename); + g_free(filename); + dialog_impl->FileSelected(dialog, path); } // static void SelectFileDialogImpl::OnSelectMultiFileDialogResponse( GtkWidget* dialog, gint response_id, SelectFileDialogImpl* dialog_impl) { - if (IsCancelResponse(response_id)) { + GSList* filenames = gtk_file_chooser_get_filenames(GTK_FILE_CHOOSER(dialog)); + + if (!filenames || IsCancelResponse(response_id)) { dialog_impl->FileNotSelected(dialog); return; } - GSList* filenames = gtk_file_chooser_get_filenames(GTK_FILE_CHOOSER(dialog)); std::vector<FilePath> filenames_fp; for (GSList* iter = filenames; iter != NULL; iter = g_slist_next(iter)) { filenames_fp.push_back(FilePath(static_cast<char*>(iter->data))); |