summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDarin Adler <darin@src.gnome.org>2000-11-06 17:46:01 +0000
committerDarin Adler <darin@src.gnome.org>2000-11-06 17:46:01 +0000
commit6261ea48137d5467c624efded0786b76f3d56115 (patch)
tree7b203cdb2b5dcd9e78b5453e7f520c1a66f1046d
parent1ca2c0d776bb554fa47801309f79327ab5c8129b (diff)
downloadnautilus-6261ea48137d5467c624efded0786b76f3d56115.tar.gz
Fixed bug 4504 (select "view as others" leads to core dump).
* libnautilus-extensions/nautilus-file.c: (nautilus_file_get_directory_item_mime_types): Change to return a copy of the MIME type list as designed. * libnautilus-extensions/nautilus-mime-actions.c: (nautilus_mime_get_default_component_for_file_internal), (nautilus_mime_get_short_list_components_for_file): Change the callers that don't free the MIME type list so that they now do.
-rw-r--r--ChangeLog14
-rw-r--r--libnautilus-extensions/nautilus-file.c5
-rw-r--r--libnautilus-extensions/nautilus-mime-actions.c13
-rw-r--r--libnautilus-private/nautilus-file.c5
-rw-r--r--libnautilus-private/nautilus-mime-actions.c13
5 files changed, 32 insertions, 18 deletions
diff --git a/ChangeLog b/ChangeLog
index 20634ed4b..68c846662 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,17 @@
+2000-11-06 Darin Adler <darin@eazel.com>
+
+ Fixed bug 4504 (select "view as others" leads to core dump).
+
+ * libnautilus-extensions/nautilus-file.c:
+ (nautilus_file_get_directory_item_mime_types):
+ Change to return a copy of the MIME type list as designed.
+
+ * libnautilus-extensions/nautilus-mime-actions.c:
+ (nautilus_mime_get_default_component_for_file_internal),
+ (nautilus_mime_get_short_list_components_for_file):
+ Change the callers that don't free the MIME type list so that they
+ now do.
+
2000-11-06 Ramiro Estrugo <ramiro@eazel.com>
* nautilus-clean.sh:
diff --git a/libnautilus-extensions/nautilus-file.c b/libnautilus-extensions/nautilus-file.c
index a548eae24..872df332d 100644
--- a/libnautilus-extensions/nautilus-file.c
+++ b/libnautilus-extensions/nautilus-file.c
@@ -2092,12 +2092,13 @@ nautilus_file_get_directory_item_mime_types (NautilusFile *file,
g_return_val_if_fail (NAUTILUS_IS_FILE (file), FALSE);
g_return_val_if_fail (mime_list != NULL, FALSE);
- if (! nautilus_file_is_directory (file) || ! file->details->got_mime_list) {
+ if (!nautilus_file_is_directory (file)
+ || !file->details->got_mime_list) {
*mime_list = NULL;
return FALSE;
}
- *mime_list = file->details->mime_list;
+ *mime_list = nautilus_g_str_list_copy (file->details->mime_list);
return TRUE;
}
diff --git a/libnautilus-extensions/nautilus-mime-actions.c b/libnautilus-extensions/nautilus-mime-actions.c
index cea9b08ea..9c9e3723f 100644
--- a/libnautilus-extensions/nautilus-mime-actions.c
+++ b/libnautilus-extensions/nautilus-mime-actions.c
@@ -418,7 +418,7 @@ nautilus_mime_get_default_component_for_file_internal (NautilusFile *file,
if (mime_default != NULL) {
default_component_string = g_strdup (mime_default->iid);
if (default_component_string != NULL) {
- /* Default component chosen based only on type. */
+ /* Default component chosen based only on type. */
used_user_chosen_info = FALSE;
}
CORBA_free (mime_default);
@@ -440,7 +440,6 @@ nautilus_mime_get_default_component_for_file_internal (NautilusFile *file,
respect the setting regardless of content type requirements */
if (metadata_default) {
extra_requirements = g_strconcat ("iid == '", default_component_string, "'", NULL);
-
info_list = nautilus_do_component_query (mime_type, uri_scheme, item_mime_types, TRUE,
explicit_iids, sort_conditions, extra_requirements, &ev);
g_free (extra_requirements);
@@ -451,19 +450,18 @@ nautilus_mime_get_default_component_for_file_internal (NautilusFile *file,
explicit_iids, sort_conditions, NULL, &ev);
}
- if (ev._major == CORBA_NO_EXCEPTION && info_list != NULL) {
+ if (info_list != NULL) {
server = OAF_ServerInfo_duplicate (info_list->data);
gnome_vfs_mime_component_list_free (info_list);
-
+
if (default_component_string != NULL && strcmp (server->iid, default_component_string) == 0) {
used_user_chosen_info = TRUE; /* Default component chosen based on user-stored . */
}
} else {
- g_assert (info_list == NULL); /* or else we are leaking it */
server = NULL;
- return NULL;
}
-
+
+ nautilus_g_list_free_deep (item_mime_types);
g_strfreev (sort_conditions);
g_free (uri_scheme);
@@ -654,6 +652,7 @@ nautilus_mime_get_short_list_components_for_file (NautilusFile *file)
g_free (extra_requirements);
}
+ nautilus_g_list_free_deep (item_mime_types);
gnome_vfs_mime_component_list_free (servers);
g_list_free (iids);
g_free (uri_scheme);
diff --git a/libnautilus-private/nautilus-file.c b/libnautilus-private/nautilus-file.c
index a548eae24..872df332d 100644
--- a/libnautilus-private/nautilus-file.c
+++ b/libnautilus-private/nautilus-file.c
@@ -2092,12 +2092,13 @@ nautilus_file_get_directory_item_mime_types (NautilusFile *file,
g_return_val_if_fail (NAUTILUS_IS_FILE (file), FALSE);
g_return_val_if_fail (mime_list != NULL, FALSE);
- if (! nautilus_file_is_directory (file) || ! file->details->got_mime_list) {
+ if (!nautilus_file_is_directory (file)
+ || !file->details->got_mime_list) {
*mime_list = NULL;
return FALSE;
}
- *mime_list = file->details->mime_list;
+ *mime_list = nautilus_g_str_list_copy (file->details->mime_list);
return TRUE;
}
diff --git a/libnautilus-private/nautilus-mime-actions.c b/libnautilus-private/nautilus-mime-actions.c
index cea9b08ea..9c9e3723f 100644
--- a/libnautilus-private/nautilus-mime-actions.c
+++ b/libnautilus-private/nautilus-mime-actions.c
@@ -418,7 +418,7 @@ nautilus_mime_get_default_component_for_file_internal (NautilusFile *file,
if (mime_default != NULL) {
default_component_string = g_strdup (mime_default->iid);
if (default_component_string != NULL) {
- /* Default component chosen based only on type. */
+ /* Default component chosen based only on type. */
used_user_chosen_info = FALSE;
}
CORBA_free (mime_default);
@@ -440,7 +440,6 @@ nautilus_mime_get_default_component_for_file_internal (NautilusFile *file,
respect the setting regardless of content type requirements */
if (metadata_default) {
extra_requirements = g_strconcat ("iid == '", default_component_string, "'", NULL);
-
info_list = nautilus_do_component_query (mime_type, uri_scheme, item_mime_types, TRUE,
explicit_iids, sort_conditions, extra_requirements, &ev);
g_free (extra_requirements);
@@ -451,19 +450,18 @@ nautilus_mime_get_default_component_for_file_internal (NautilusFile *file,
explicit_iids, sort_conditions, NULL, &ev);
}
- if (ev._major == CORBA_NO_EXCEPTION && info_list != NULL) {
+ if (info_list != NULL) {
server = OAF_ServerInfo_duplicate (info_list->data);
gnome_vfs_mime_component_list_free (info_list);
-
+
if (default_component_string != NULL && strcmp (server->iid, default_component_string) == 0) {
used_user_chosen_info = TRUE; /* Default component chosen based on user-stored . */
}
} else {
- g_assert (info_list == NULL); /* or else we are leaking it */
server = NULL;
- return NULL;
}
-
+
+ nautilus_g_list_free_deep (item_mime_types);
g_strfreev (sort_conditions);
g_free (uri_scheme);
@@ -654,6 +652,7 @@ nautilus_mime_get_short_list_components_for_file (NautilusFile *file)
g_free (extra_requirements);
}
+ nautilus_g_list_free_deep (item_mime_types);
gnome_vfs_mime_component_list_free (servers);
g_list_free (iids);
g_free (uri_scheme);