[hackers] [surf] Fix style files handling: stop leaking strings. || Quentin Rameau

From: <git_AT_suckless.org>
Date: Sat, 31 Oct 2015 17:50:41 +0100 (CET)

commit d84fe71094e5eb2598344da5c6a1d6f64381142c
Author: Quentin Rameau <quinq+hackers_AT_fifth.space>
AuthorDate: Sat Oct 31 12:34:31 2015 +0100
Commit: Christoph Lohmann <20h_AT_r-36.net>
CommitDate: Sat Oct 31 17:50:03 2015 +0100

    Fix style files handling: stop leaking strings.
    
    Everytime getstyle() was being called, we returned newly allocated
    strings without ever freing them.
    Now uri stylefiles only get allocated once at setup().
    
    Signed-off-by: Christoph Lohmann <20h_AT_r-36.net>

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);
 }
Received on Sat Oct 31 2015 - 17:50:41 CET

This archive was generated by hypermail 2.3.0 : Sat Oct 31 2015 - 18:00:15 CET