iFix style files handling: stop leaking strings. - surf - Surf web browser. Err gopher.r-36.net 70 i Err gopher.r-36.net 70 1Log /scm/surf//log.gph gopher.r-36.net 70 1Files /scm/surf//files.gph gopher.r-36.net 70 1Refs /scm/surf//refs.gph gopher.r-36.net 70 1README /scm/surf//file/README.gph gopher.r-36.net 70 1LICENSE /scm/surf//file/LICENSE.gph gopher.r-36.net 70 i--- Err gopher.r-36.net 70 1commit d84fe71094e5eb2598344da5c6a1d6f64381142c /scm/surf//commit/d84fe71094e5eb2598344da5c6a1d6f64381142c.gph gopher.r-36.net 70 1parent d486169fa47c0aa2c038df81fe23232a1cefff4b /scm/surf//commit/d486169fa47c0aa2c038df81fe23232a1cefff4b.gph gopher.r-36.net 70 hAuthor: Quentin Rameau URL:mailto:quinq+hackers@fifth.space gopher.r-36.net 70 iDate: Sat, 31 Oct 2015 12:34:31 +0100 Err gopher.r-36.net 70 i Err gopher.r-36.net 70 iFix style files handling: stop leaking strings. Err gopher.r-36.net 70 i Err gopher.r-36.net 70 iEverytime getstyle() was being called, we returned newly allocated Err gopher.r-36.net 70 istrings without ever freing them. Err gopher.r-36.net 70 iNow uri stylefiles only get allocated once at setup(). Err gopher.r-36.net 70 i Err gopher.r-36.net 70 iSigned-off-by: Christoph Lohmann <20h@r-36.net> Err gopher.r-36.net 70 i Err gopher.r-36.net 70 iDiffstat: Err gopher.r-36.net 70 i surf.c | 36 +++++++++++++++++++------------ Err gopher.r-36.net 70 i Err gopher.r-36.net 70 i1 file changed, 22 insertions(+), 14 deletions(-) Err gopher.r-36.net 70 i--- Err gopher.r-36.net 70 1diff --git a/surf.c b/surf.c /scm/surf//file/surf.c.gph gopher.r-36.net 70 i@@ -154,7 +154,7 @@ static const char *getatom(Client *c, int a); Err gopher.r-36.net 70 i static void gettogglestat(Client *c); Err gopher.r-36.net 70 i static void getpagestat(Client *c); Err gopher.r-36.net 70 i static char *geturi(Client *c); Err gopher.r-36.net 70 i-static gchar *getstyle(const char *uri); Err gopher.r-36.net 70 i+static const gchar *getstyle(const char *uri); Err gopher.r-36.net 70 i Err gopher.r-36.net 70 i static void handleplumb(Client *c, WebKitWebView *w, const gchar *uri); Err gopher.r-36.net 70 i Err gopher.r-36.net 70 i@@ -645,20 +645,21 @@ geturi(Client *c) Err gopher.r-36.net 70 i return uri; Err gopher.r-36.net 70 i } Err gopher.r-36.net 70 i Err gopher.r-36.net 70 i-gchar * Err gopher.r-36.net 70 i+const gchar * Err gopher.r-36.net 70 i getstyle(const char *uri) Err gopher.r-36.net 70 i { Err gopher.r-36.net 70 i int i; Err gopher.r-36.net 70 i Err gopher.r-36.net 70 i if (stylefile != NULL) Err gopher.r-36.net 70 i- return g_strconcat("file://", stylefile, NULL); Err gopher.r-36.net 70 i+ return stylefile; Err gopher.r-36.net 70 i Err gopher.r-36.net 70 i for (i = 0; i < LENGTH(styles); i++) { Err gopher.r-36.net 70 i if (styles[i].regex && !regexec(&(styles[i].re), uri, 0, Err gopher.r-36.net 70 i NULL, 0)) Err gopher.r-36.net 70 i- return g_strconcat("file://", styles[i].style, NULL); Err gopher.r-36.net 70 i+ return styles[i].style; Err gopher.r-36.net 70 i } Err gopher.r-36.net 70 i- return g_strdup(""); Err gopher.r-36.net 70 i+ Err gopher.r-36.net 70 i+ return ""; Err gopher.r-36.net 70 i } Err gopher.r-36.net 70 i Err gopher.r-36.net 70 i void Err gopher.r-36.net 70 i@@ -1285,8 +1286,8 @@ void Err gopher.r-36.net 70 i setup(void) Err gopher.r-36.net 70 i { Err gopher.r-36.net 70 i int i; Err gopher.r-36.net 70 i- char *proxy; Err gopher.r-36.net 70 i- char *new_proxy; Err gopher.r-36.net 70 i+ char *proxy, *new_proxy; Err gopher.r-36.net 70 i+ char *styledirfile, *stylepath; Err gopher.r-36.net 70 i SoupURI *puri; Err gopher.r-36.net 70 i SoupSession *s; Err gopher.r-36.net 70 i GError *error = NULL; Err gopher.r-36.net 70 i@@ -1306,8 +1307,8 @@ setup(void) Err gopher.r-36.net 70 i cookiefile = buildfile(cookiefile); Err gopher.r-36.net 70 i scriptfile = buildfile(scriptfile); Err gopher.r-36.net 70 i cachefolder = buildpath(cachefolder); Err gopher.r-36.net 70 i- styledir = buildpath(styledir); Err gopher.r-36.net 70 i if (stylefile == NULL) { Err gopher.r-36.net 70 i+ styledir = buildpath(styledir); Err gopher.r-36.net 70 i for (i = 0; i < LENGTH(styles); i++) { Err gopher.r-36.net 70 i if (regcomp(&(styles[i].re), styles[i].regex, Err gopher.r-36.net 70 i REG_EXTENDED)) { Err gopher.r-36.net 70 i@@ -1316,11 +1317,19 @@ setup(void) Err gopher.r-36.net 70 i styles[i].regex); Err gopher.r-36.net 70 i styles[i].regex = NULL; Err gopher.r-36.net 70 i } Err gopher.r-36.net 70 i- styles[i].style = buildfile(g_strconcat(styledir, "/", Err gopher.r-36.net 70 i- styles[i].style, NULL)); Err gopher.r-36.net 70 i+ styledirfile = g_strconcat(styledir, "/", Err gopher.r-36.net 70 i+ styles[i].style, NULL); Err gopher.r-36.net 70 i+ stylepath = buildfile(styledirfile); Err gopher.r-36.net 70 i+ styles[i].style = g_strconcat("file://", stylepath, Err gopher.r-36.net 70 i+ NULL); Err gopher.r-36.net 70 i+ g_free(styledirfile); Err gopher.r-36.net 70 i+ g_free(stylepath); Err gopher.r-36.net 70 i } Err gopher.r-36.net 70 i+ g_free(styledir); Err gopher.r-36.net 70 i } else { Err gopher.r-36.net 70 i- stylefile = buildfile(stylefile); Err gopher.r-36.net 70 i+ stylepath = buildfile(stylefile); Err gopher.r-36.net 70 i+ stylefile = g_strconcat("file://", stylepath, NULL); Err gopher.r-36.net 70 i+ g_free(stylepath); Err gopher.r-36.net 70 i } Err gopher.r-36.net 70 i Err gopher.r-36.net 70 i /* request handler */ Err gopher.r-36.net 70 i@@ -1523,11 +1532,10 @@ void Err gopher.r-36.net 70 i ttogglestyle(Client *c, const Arg *arg) Err gopher.r-36.net 70 i { Err gopher.r-36.net 70 i WebKitWebSettings *settings = webkit_web_view_get_settings(c->view); Err gopher.r-36.net 70 i- char *uri; Err gopher.r-36.net 70 i Err gopher.r-36.net 70 i enablestyles = !enablestyles; Err gopher.r-36.net 70 i- uri = enablestyles ? getstyle(geturi(c)) : g_strdup(""); Err gopher.r-36.net 70 i- g_object_set(G_OBJECT(settings), "user-stylesheet-uri", uri, NULL); Err gopher.r-36.net 70 i+ g_object_set(G_OBJECT(settings), "user-stylesheet-uri", Err gopher.r-36.net 70 i+ enablestyles ? getstyle(geturi(c)) : "", NULL); Err gopher.r-36.net 70 i Err gopher.r-36.net 70 i updatetitle(c); Err gopher.r-36.net 70 i } Err gopher.r-36.net 70 .