summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorestade@chromium.org <estade@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2009-10-22 20:57:13 +0000
committerestade@chromium.org <estade@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2009-10-22 20:57:13 +0000
commitfc2652479169e0cfda69fb58c8232ed32e86b706 (patch)
tree7dc9a849ffd5f48b2e05bec8479fe1a1c8f181be
parentaf958dd5f74817150f58d762a1b99f05e5d355a6 (diff)
downloadchromium_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.cc20
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)));