[hackers] [PATCH 1/2] Fix style files handling: stop leaking strings.

From: Quentin Rameau <quinq+hackers_AT_fifth.space>
Date: Sat, 31 Oct 2015 12:34:31 +0100

Everytime getstyle() was being called, we returned newly allocated
strings without ever freing them.
Now uri stylefiles only get allocated once at setup().
---
 surf.c | 36 ++++++++++++++++++++++--------------
 1 file changed, 22 insertions(+), 14 deletions(-)
diff --git a/surf.c b/surf.c
index 28bffef..55ffd84 100644
--- a/surf.c
+++ b/surf.c
_AT_@ -154,7 +154,7 @@ static const char *getatom(Client *c, int a);
 static void gettogglestat(Client *c);
 static void getpagestat(Client *c);
 static char *geturi(Client *c);
-static gchar *getstyle(const char *uri);
+static const gchar *getstyle(const char *uri);
 
 static void handleplumb(Client *c, WebKitWebView *w, const gchar *uri);
 
_AT_@ -645,20 +645,21 @@ geturi(Client *c)
 	return uri;
 }
 
-gchar *
+const gchar *
 getstyle(const char *uri)
 {
 	int i;
 
 	if (stylefile != NULL)
-		return g_strconcat("file://", stylefile, NULL);
+		return stylefile;
 
 	for (i = 0; i < LENGTH(styles); i++) {
 		if (styles[i].regex && !regexec(&(styles[i].re), uri, 0,
 		    NULL, 0))
-			return g_strconcat("file://", styles[i].style, NULL);
+			return styles[i].style;
 	}
-	return g_strdup("");
+
+	return "";
 }
 
 void
_AT_@ -1285,8 +1286,8 @@ void
 setup(void)
 {
 	int i;
-	char *proxy;
-	char *new_proxy;
+	char *proxy, *new_proxy;
+	char *styledirfile, *stylepath;
 	SoupURI *puri;
 	SoupSession *s;
 	GError *error = NULL;
_AT_@ -1306,8 +1307,8 @@ setup(void)
 	cookiefile = buildfile(cookiefile);
 	scriptfile = buildfile(scriptfile);
 	cachefolder = buildpath(cachefolder);
-	styledir = buildpath(styledir);
 	if (stylefile == NULL) {
+		styledir = buildpath(styledir);
 		for (i = 0; i < LENGTH(styles); i++) {
 			if (regcomp(&(styles[i].re), styles[i].regex,
 			    REG_EXTENDED)) {
_AT_@ -1316,11 +1317,19 @@ setup(void)
 				        styles[i].regex);
 				styles[i].regex = NULL;
 			}
-			styles[i].style = buildfile(g_strconcat(styledir, "/",
-			                            styles[i].style, NULL));
+			styledirfile    = g_strconcat(styledir, "/",
+			                              styles[i].style, NULL);
+			stylepath       = buildfile(styledirfile);
+			styles[i].style = g_strconcat("file://", stylepath,
+			                              NULL);
+			g_free(styledirfile);
+			g_free(stylepath);
 		}
+		g_free(styledir);
 	} else {
-		stylefile = buildfile(stylefile);
+		stylepath = buildfile(stylefile);
+		stylefile = g_strconcat("file://", stylepath, NULL);
+		g_free(stylepath);
 	}
 
 	/* request handler */
_AT_@ -1523,11 +1532,10 @@ void
 togglestyle(Client *c, const Arg *arg)
 {
 	WebKitWebSettings *settings = webkit_web_view_get_settings(c->view);
-	char *uri;
 
 	enablestyles = !enablestyles;
-	uri = enablestyles ? getstyle(geturi(c)) : g_strdup("");
-	g_object_set(G_OBJECT(settings), "user-stylesheet-uri", uri, NULL);
+	g_object_set(G_OBJECT(settings), "user-stylesheet-uri",
+	             enablestyles ? getstyle(geturi(c)) : "", NULL);
 
 	updatetitle(c);
 }
-- 
2.6.2
Received on Sat Oct 31 2015 - 12:34:31 CET

This archive was generated by hypermail 2.3.0 : Sat Oct 31 2015 - 12:36:11 CET