]> spindle.queued.net Git - midori/commitdiff
Avoid memory allocated sig in adblock_is_matched_by_key
authorAlexander Butenko <a.butenka@gmail.com>
Mon, 28 Nov 2011 19:58:57 +0000 (20:58 +0100)
committerChristian Dywan <christian@twotoasts.de>
Mon, 28 Nov 2011 20:03:37 +0000 (21:03 +0100)
extensions/adblock.c

index cbd0072f1e9245b56837a167ae2f86a5d5b47e6e..4e5ae064fc0e5f3e0936ded300f49493bc4318f7 100644 (file)
@@ -648,6 +648,7 @@ adblock_is_matched_by_key (const gchar* req_uri,
     GList* regex_bl = NULL;
     GString* guri;
     gboolean ret = FALSE;
+    gchar sig[SIGNATURE_SIZE + 1];
 
     /* Signatures are made on pattern, so we need to convert url to a pattern as well */
     guri = adblock_fixup_regexp ("", (gchar*)req_uri);
@@ -656,21 +657,17 @@ adblock_is_matched_by_key (const gchar* req_uri,
 
     for (pos = len - SIGNATURE_SIZE; pos >= 0; pos--)
     {
-        gchar* sig = g_strndup (uri + pos, SIGNATURE_SIZE);
-        GRegex* regex = g_hash_table_lookup (keys, sig);
+        GRegex* regex;
+        strncpy (sig, uri + pos, SIGNATURE_SIZE);
+        regex = g_hash_table_lookup (keys, sig);
 
         /* Dont check if regex is already blacklisted */
         if (!regex || g_list_find (regex_bl, regex))
-        {
-            g_free (sig);
             continue;
-        }
         ret = adblock_check_rule (regex, sig, req_uri, page_uri);
-        g_free (sig);
         if (!ret)
-            regex_bl = g_list_prepend (regex_bl, regex);
-        else
             break;
+        regex_bl = g_list_prepend (regex_bl, regex);
     }
     g_string_free (guri, TRUE);
     g_list_free (regex_bl);