diff -upNr gnome-settings-daemon-3.6.4.orig/plugins/updates/gsd-updates-firmware.c gnome-settings-daemon-3.6.4/plugins/updates/gsd-updates-firmware.c
--- gnome-settings-daemon-3.6.4.orig/plugins/updates/gsd-updates-firmware.c	2013-02-18 15:42:24.123479366 -0500
+++ gnome-settings-daemon-3.6.4/plugins/updates/gsd-updates-firmware.c	2013-02-18 15:57:02.387011011 -0500
@@ -647,18 +647,20 @@ remove_banned (GsdUpdatesFirmware *firmw
         banned = g_strsplit (banned_str, ",", 0);
 
         /* remove any banned pattern matches */
-        for (i=0; i<array->len; i++) {
+        i = 0;
+        while (i < array->len) {
                 req = g_ptr_array_index (array, i);
                 for (j=0; banned[j] != NULL; j++) {
                         ret = g_pattern_match_simple (banned[j], req->filename);
                         if (ret) {
                                 g_debug ("match %s for %s, removing",
                                          banned[j], req->filename);
-                                request_free (req);
                                 g_ptr_array_remove_index_fast (array, i);
                                 break;
                         }
                 }
+                if (!ret)
+                        i++;
         }
 out:
         g_free (banned_str);
@@ -692,7 +694,8 @@ remove_ignored (GsdUpdatesFirmware *firm
         ignored = g_strsplit (ignored_str, ",", 0);
 
         /* remove any ignored pattern matches */
-        for (i=0; i<array->len; i++) {
+        i = 0;
+        while (i < array->len) {
                 req = g_ptr_array_index (array, i);
                 if (req->id == NULL)
                         continue;
@@ -700,11 +703,12 @@ remove_ignored (GsdUpdatesFirmware *firm
                         ret = g_pattern_match_simple (ignored[j], req->id);
                         if (ret) {
                                 g_debug ("match %s for %s, removing", ignored[j], req->id);
-                                request_free (req);
                                 g_ptr_array_remove_index_fast (array, i);
                                 break;
                         }
                 }
+                if (!ret)
+                        i++;
         }
 out:
         g_free (ignored_str);
