From facfa80c2b36ca7479de4323b77019965363dc6e Mon Sep 17 00:00:00 2001 From: Michael Catanzaro Date: Wed, 13 Jun 2018 11:10:23 -0500 Subject: [PATCH] uri-tester: Fix urlcache memory leak Something went wrong with the git history related to e17dc362, and we wound up allocating a string here that will never be freed. Whoops. Then we pass it through GPOINTER_TO_INT() even though it is really a random pointer and not going to be a meaningful integer value, and return it as a gboolean. So we have a gboolean that is neither TRUE nor FALSE, which is bad. But fortunately, it looks like it's never explicitly compared to TRUE, so there should have been no behavioral issue besides the leak. This is related to #37. --- embed/web-extension/ephy-uri-tester.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/embed/web-extension/ephy-uri-tester.c b/embed/web-extension/ephy-uri-tester.c index 70f7cfd..a871f66 100644 --- a/embed/web-extension/ephy-uri-tester.c +++ b/embed/web-extension/ephy-uri-tester.c @@ -189,7 +189,7 @@ ephy_uri_tester_is_matched (EphyUriTester *tester, /* Look for a match either by key or by pattern. */ if (ephy_uri_tester_is_matched_by_key (tester, opts, req_uri, page_uri, whitelist)) { - g_hash_table_insert (urlcache, g_strdup (req_uri), g_strdup ("1")); + g_hash_table_insert (urlcache, g_strdup (req_uri), GINT_TO_POINTER (TRUE)); return TRUE; } -- libgit2 0.27.1 From d76a401971da4cecf746fa98cb94db6fa45fd88e Mon Sep 17 00:00:00 2001 From: Michael Catanzaro Date: Wed, 13 Jun 2018 11:32:53 -0500 Subject: [PATCH] uri-tester: Fix cache lookups when URI is not matched This regressed in e17dc3627218aed60e2fa61486757b55dc804b6e. g_hash_table_lookup() cannot distinguish between a missing value and a NULL value. We are storing a NULL pointer (GINT_TO_POINTER (FALSE)) to indicate that the URL is not a match, so the end result is that instead of a cache hit indicating we should return FALSE, we instead get a cache miss and then have to manually determine that we need to return FALSE. This should be a performance fix only, it should not affect correctness. Fixes #37 --- embed/web-extension/ephy-uri-tester.c | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/embed/web-extension/ephy-uri-tester.c b/embed/web-extension/ephy-uri-tester.c index a871f66..5158dcb 100644 --- a/embed/web-extension/ephy-uri-tester.c +++ b/embed/web-extension/ephy-uri-tester.c @@ -178,14 +178,14 @@ ephy_uri_tester_is_matched (EphyUriTester *tester, const char *page_uri, gboolean whitelist) { - char *value; + gpointer is_matched; GHashTable *urlcache = tester->urlcache; if (whitelist) urlcache = tester->whitelisted_urlcache; /* Check cached URLs first. */ - if ((value = g_hash_table_lookup (urlcache, req_uri))) - return GPOINTER_TO_INT (value); + if (g_hash_table_lookup_extended (urlcache, req_uri, NULL, &is_matched)) + return GPOINTER_TO_INT (is_matched); /* Look for a match either by key or by pattern. */ if (ephy_uri_tester_is_matched_by_key (tester, opts, req_uri, page_uri, whitelist)) { @@ -199,6 +199,7 @@ ephy_uri_tester_is_matched (EphyUriTester *tester, return TRUE; } + /* No match. */ g_hash_table_insert (urlcache, g_strdup (req_uri), GINT_TO_POINTER (FALSE)); return FALSE; } -- libgit2 0.27.1