cleanup on global css rules parsing error - surf-adblock - Surf adblock web extension
HTML git clone git://git.codemadness.org/surf-adblock
DIR Log
DIR Files
DIR Refs
DIR README
DIR LICENSE
---
DIR commit ab4d1e8f7ed4eafd6d1a7a99bc183944c1dc7e41
DIR parent 08fb7a7ce1e8ac16f40f72820b3122bcc30c2100
HTML Author: Quentin Rameau <quinq@fifth.space>
Date: Sun, 17 Jul 2016 20:53:50 +0200
cleanup on global css rules parsing error
All possible errors there would have occurred before binding to the
webkit signals so we just need to free allocated memory and return.
Diffstat:
M surf-adblock.c | 38 ++++++++++++++++++++++++++++---
1 file changed, 35 insertions(+), 3 deletions(-)
---
DIR diff --git a/surf-adblock.c b/surf-adblock.c
@@ -112,6 +112,27 @@ static Page *pages;
static struct filterrule *rules;
static void
+cleanup(void)
+{
+ struct filterrule *r;
+ struct filterdomain *d;
+
+ free(globalcss.data);
+
+ for (r = rules; r; r = rules) {
+ for (d = r->domains; d; d = r->domains) {
+ free(d->domain);
+ r->domains = d->next;
+ free(d);
+ }
+ free(r->css);
+ free(r->uri);
+ rules = r->next;
+ free(r);
+ }
+}
+
+static void
weprintf(const char *fmt, ...)
{
va_list ap;
@@ -835,8 +856,11 @@ webpagecreated(WebKitWebExtension *e, WebKitWebPage *p, gpointer unused)
{
Page *np;
- if (!(np = newpage(p)))
+ if (!(np = newpage(p))) {
+ weprintf("cannot associate webext with new page: %s\n",
+ strerror(errno));
return;
+ }
g_signal_connect(p, "document-loaded", G_CALLBACK(documentloaded), np);
g_signal_connect(p, "send-request", G_CALLBACK(sendrequest), np);
@@ -889,11 +913,19 @@ webkit_web_extension_initialize(WebKitWebExtension *ext)
continue;
len = strlen(r->css);
- if (string_append(&globalcss, r->css, strlen(r->css)) < len)
+ if (string_append(&globalcss, r->css, strlen(r->css)) < len) {
+ weprintf("cannot load global css selectors "
+ "in memory\n");
+ cleanup();
return;
+ }
len = sizeof("{display:none;}") - 1;
- if (string_append(&globalcss, "{display:none;}", len) < len)
+ if (string_append(&globalcss, "{display:none;}", len) < len) {
+ weprintf("cannot append css rule "
+ "to global css selectors\n");
+ cleanup();
return;
+ }
}
g_signal_connect(ext, "page-created", G_CALLBACK(webpagecreated), NULL);