diff --git a/ChangeLog b/ChangeLog index 41bcb18427..a2c7d805c7 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,9 @@ +2004-04-15 Federico Mena Quintero + + * gtk/gtkfilechooserdefault.c (split_uris): Use a variant of the + code from gtkfilesel.c to parse a "text/uri-list" blob. Fixes + #140126. + 2004-04-15 Matthias Clasen * gtk/gtkcellrenderer.c (gtk_cell_renderer_class_init): diff --git a/ChangeLog.pre-2-10 b/ChangeLog.pre-2-10 index 41bcb18427..a2c7d805c7 100644 --- a/ChangeLog.pre-2-10 +++ b/ChangeLog.pre-2-10 @@ -1,3 +1,9 @@ +2004-04-15 Federico Mena Quintero + + * gtk/gtkfilechooserdefault.c (split_uris): Use a variant of the + code from gtkfilesel.c to parse a "text/uri-list" blob. Fixes + #140126. + 2004-04-15 Matthias Clasen * gtk/gtkcellrenderer.c (gtk_cell_renderer_class_init): diff --git a/ChangeLog.pre-2-4 b/ChangeLog.pre-2-4 index 41bcb18427..a2c7d805c7 100644 --- a/ChangeLog.pre-2-4 +++ b/ChangeLog.pre-2-4 @@ -1,3 +1,9 @@ +2004-04-15 Federico Mena Quintero + + * gtk/gtkfilechooserdefault.c (split_uris): Use a variant of the + code from gtkfilesel.c to parse a "text/uri-list" blob. Fixes + #140126. + 2004-04-15 Matthias Clasen * gtk/gtkcellrenderer.c (gtk_cell_renderer_class_init): diff --git a/ChangeLog.pre-2-6 b/ChangeLog.pre-2-6 index 41bcb18427..a2c7d805c7 100644 --- a/ChangeLog.pre-2-6 +++ b/ChangeLog.pre-2-6 @@ -1,3 +1,9 @@ +2004-04-15 Federico Mena Quintero + + * gtk/gtkfilechooserdefault.c (split_uris): Use a variant of the + code from gtkfilesel.c to parse a "text/uri-list" blob. Fixes + #140126. + 2004-04-15 Matthias Clasen * gtk/gtkcellrenderer.c (gtk_cell_renderer_class_init): diff --git a/ChangeLog.pre-2-8 b/ChangeLog.pre-2-8 index 41bcb18427..a2c7d805c7 100644 --- a/ChangeLog.pre-2-8 +++ b/ChangeLog.pre-2-8 @@ -1,3 +1,9 @@ +2004-04-15 Federico Mena Quintero + + * gtk/gtkfilechooserdefault.c (split_uris): Use a variant of the + code from gtkfilesel.c to parse a "text/uri-list" blob. Fixes + #140126. + 2004-04-15 Matthias Clasen * gtk/gtkcellrenderer.c (gtk_cell_renderer_class_init): diff --git a/gtk/gtkfilechooserdefault.c b/gtk/gtkfilechooserdefault.c index 90675541c0..60143eec9a 100644 --- a/gtk/gtkfilechooserdefault.c +++ b/gtk/gtkfilechooserdefault.c @@ -2239,28 +2239,49 @@ shortcuts_drag_drop_cb (GtkWidget *widget, return TRUE; } -/* Converts raw selection data from text/uri-list to a list of strings */ +/* Converts raw selection data from text/uri-list to a list of strings. */ static GSList * split_uris (const char *data) { GSList *uris; - const char *p, *start; + const char *p, *q; uris = NULL; - start = data; + p = data; - for (p = start; *p != 0; p++) - if (*p == '\r' && *(p + 1) == '\n') - { - char *name; + /* We don't actually try to validate the URI according to RFC + * 2396, or even check for allowed characters - we just ignore + * comments and trim whitespace off the ends. We also + * allow LF delimination as well as the specified CRLF. + * + * We do allow comments like specified in RFC 2483. + */ + while (p) + { + if (*p != '#') + { + while (g_ascii_isspace (*p)) + p++; - name = g_strndup (start, p - start); - uris = g_slist_prepend (uris, name); + q = p; + while (*q && (*q != '\n') && (*q != '\r')) + q++; - start = p + 2; - p = start; - } + if (q > p) + { + q--; + while (q > p && g_ascii_isspace (*q)) + q--; + + if (q > p) + uris = g_slist_prepend (uris, g_strndup (p, q - p + 1)); + } + } + p = strchr (p, '\n'); + if (p) + p++; + } uris = g_slist_reverse (uris); return uris; @@ -5075,7 +5096,7 @@ location_entry_set_from_list (GtkFileChooserDefault *impl, gtk_tree_path_free (tree_path); gtk_tree_model_sort_convert_iter_to_child_iter (impl->sort_model, &child_iter, &iter); - + info = _gtk_file_system_model_get_info (impl->browse_files_model, &child_iter); if (!info) return;