Handle NULL attribute matchers safely, as we return this for empty
authorAlexander Larsson <alexl@redhat.com>
Thu, 3 Jan 2008 14:58:53 +0000 (14:58 +0000)
committerAlexander Larsson <alexl@src.gnome.org>
Thu, 3 Jan 2008 14:58:53 +0000 (14:58 +0000)
2008-01-03  Alexander Larsson  <alexl@redhat.com>

        * gfileinfo.c:
Handle NULL attribute matchers safely, as we return this
for empty attribute matcher strings.

svn path=/trunk/; revision=6238

gio/ChangeLog
gio/gfileinfo.c

index ea2585c7887390fe6fce8d6f9d166dfc4bf1f145..c1c92265c5b72b8db031cecbcb6079f902acaa3f 100644 (file)
@@ -1,3 +1,9 @@
+2008-01-03  Alexander Larsson  <alexl@redhat.com>
+
+        * gfileinfo.c:
+       Handle NULL attribute matchers safely, as we return this
+       for empty attribute matcher strings.
+
 2008-01-03  Alexander Larsson  <alexl@redhat.com>
 
        * gunixmounts.c (g_unix_is_mount_path_system_internal):
index c1f0081f2561c8f34260c79d45373151919b1d7d..b2748083a30b84aaede336973fc002066e884835 100644 (file)
@@ -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)
     {