From 491cccf63ad52b6a073fb96fc467a3d9a18d9878 Mon Sep 17 00:00:00 2001 From: Alexander Larsson Date: Thu, 3 Jan 2008 14:58:53 +0000 Subject: [PATCH] Handle NULL attribute matchers safely, as we return this for empty 2008-01-03 Alexander Larsson * gfileinfo.c: Handle NULL attribute matchers safely, as we return this for empty attribute matcher strings. svn path=/trunk/; revision=6238 --- gio/ChangeLog | 6 ++++++ gio/gfileinfo.c | 46 ++++++++++++++++++++++++++++------------------ 2 files changed, 34 insertions(+), 18 deletions(-) diff --git a/gio/ChangeLog b/gio/ChangeLog index ea2585c..c1c9226 100644 --- a/gio/ChangeLog +++ b/gio/ChangeLog @@ -1,5 +1,11 @@ 2008-01-03 Alexander Larsson + * gfileinfo.c: + Handle NULL attribute matchers safely, as we return this + for empty attribute matcher strings. + +2008-01-03 Alexander Larsson + * gunixmounts.c (g_unix_is_mount_path_system_internal): Add /usr/local to list of internal mountpoints diff --git a/gio/gfileinfo.c b/gio/gfileinfo.c index c1f0081..b274808 100644 --- a/gio/gfileinfo.c +++ b/gio/gfileinfo.c @@ -1926,11 +1926,11 @@ g_file_attribute_matcher_new (const char *attributes) GFileAttributeMatcher * g_file_attribute_matcher_ref (GFileAttributeMatcher *matcher) { - g_return_val_if_fail (matcher != NULL, NULL); - g_return_val_if_fail (matcher->ref > 0, NULL); - - g_atomic_int_inc (&matcher->ref); - + if (matcher) + { + g_return_val_if_fail (matcher->ref > 0, NULL); + g_atomic_int_inc (&matcher->ref); + } return matcher; } @@ -1945,15 +1945,17 @@ g_file_attribute_matcher_ref (GFileAttributeMatcher *matcher) void g_file_attribute_matcher_unref (GFileAttributeMatcher *matcher) { - g_return_if_fail (matcher != NULL); - g_return_if_fail (matcher->ref > 0); - - if (g_atomic_int_dec_and_test (&matcher->ref)) + if (matcher) { - if (matcher->more_sub_matchers) - g_array_free (matcher->more_sub_matchers, TRUE); + g_return_if_fail (matcher->ref > 0); - g_free (matcher); + if (g_atomic_int_dec_and_test (&matcher->ref)) + { + if (matcher->more_sub_matchers) + g_array_free (matcher->more_sub_matchers, TRUE); + + g_free (matcher); + } } } @@ -1973,10 +1975,10 @@ g_file_attribute_matcher_matches_only (GFileAttributeMatcher *matcher, { guint32 id; - g_return_val_if_fail (matcher != NULL, FALSE); g_return_val_if_fail (attribute != NULL && *attribute != '\0', FALSE); - if (matcher->all) + if (matcher == NULL || + matcher->all) return FALSE; id = lookup_attribute (attribute); @@ -2046,9 +2048,12 @@ gboolean g_file_attribute_matcher_matches (GFileAttributeMatcher *matcher, const char *attribute) { - g_return_val_if_fail (matcher != NULL, FALSE); g_return_val_if_fail (attribute != NULL && *attribute != '\0', FALSE); + /* We return a NULL matcher for an empty match string, so handle this */ + if (matcher == NULL) + return FALSE; + if (matcher->all) return TRUE; @@ -2079,8 +2084,11 @@ g_file_attribute_matcher_enumerate_namespace (GFileAttributeMatcher *matcher, int ns_id; int i; - g_return_val_if_fail (matcher != NULL, FALSE); g_return_val_if_fail (ns != NULL && *ns != '\0', FALSE); + + /* We return a NULL matcher for an empty match string, so handle this */ + if (matcher == NULL) + return FALSE; if (matcher->all) return TRUE; @@ -2123,8 +2131,10 @@ g_file_attribute_matcher_enumerate_next (GFileAttributeMatcher *matcher) { int i; SubMatcher *sub_matcher; - - g_return_val_if_fail (matcher != NULL, NULL); + + /* We return a NULL matcher for an empty match string, so handle this */ + if (matcher == NULL) + return NULL; while (1) { -- 2.7.4