On Sun, Jul 25, 2010 at 03:50:59PM +0100, Rob wrote:
>Hi, I found a few problems when I was messing around with surf this afternoon.
>
>The first patch should fix a memory leak that happens when surf loads a new uri.
>I tried to check with debug flags and valgrind, but, after sifting
>through the usual thousand or so GTK leaks, invalid writes and other
>assorted problems, I found nothing, although the patch makes sense,
>given that 'u' is g_free()'d in one branch of the if-statement, but
>not the other.
>
>The second patch fixes a null pointer dereference that I got when
>refreshing a page while it was still loading. I'm pretty certain 'w'
>was null because valgrind reported line 256 as the error, and the only
>pointer dereference on that line is w->window. Either that or one of
>the function arguments was null and surf segfaulted inside a gtk
>function. Typically, by the time I realised this, the valgrind log was
>lost to the oblivion, so it's tough luck there.
And while you're at it:
diff --git a/surf.c b/surf.c
--- a/surf.c
+++ b/surf.c
@@ -78,7 +78,7 @@ static void drawindicator(Client *c);
static gboolean exposeindicator(GtkWidget *w, GdkEventExpose *e, Client *c);
static void find(Client *c, const Arg *arg);
static const char *getatom(Client *c, int a);
-static const char *getcookies(SoupURI *uri);
+static char *getcookies(SoupURI *uri);
static char *geturi(Client *c);
void gotheaders(SoupMessage *msg, gpointer user_data);
static gboolean initdownload(WebKitWebView *v, WebKitDownload *o, Client *c);
@@ -153,6 +153,7 @@ runscript(WebKitWebFrame *frame, JSConte
if(g_file_get_contents(scriptfile, &script, NULL, &error)) {
jsscript = JSStringCreateWithUTF8CString(script);
+ g_free(script);
JSEvaluateScript(js, jsscript, JSContextGetGlobalObject(js), NULL, 0, &exception);
}
}
@@ -276,9 +277,9 @@ find(Client *c, const Arg *arg) {
webkit_web_view_search_text(c->view, s, FALSE, forward, TRUE);
}
-const char *
+char *
getcookies(SoupURI *uri) {
- const char *c;
+ char *c;
SoupCookieJar *j = soup_cookie_jar_text_new(cookiefile, TRUE);
c = soup_cookie_jar_get_cookies(j, uri, TRUE);
g_object_unref(j);
@@ -524,12 +525,14 @@ void
newrequest(SoupSession *s, SoupMessage *msg, gpointer v) {
SoupMessageHeaders *h = msg->request_headers;
SoupURI *uri;
- const char *c;
+ char *c;
soup_message_headers_remove(h, "Cookie");
uri = soup_message_get_uri(msg);
- if((c = getcookies(uri)))
+ if((c = getcookies(uri))) {
soup_message_headers_append(h, "Cookie", c);
+ g_free(c);
+ }
g_signal_connect_after(G_OBJECT(msg), "got-headers", G_CALLBACK(gotheaders), NULL);
}
Not that it matters much when WebKit leaks like a sieve.
-- Kris Maglione Increasingly, people seem to misinterpret complexity as sophistication, which is baffling---the incomprehensible should cause suspicion rather than admiration. Possibly this trend results from a mistaken belief that using a somewhat mysterious device confers an aura of power on the user. --Niklaus WirthReceived on Sun Jul 25 2010 - 17:56:57 CEST
This archive was generated by hypermail 2.2.0 : Sun Jul 25 2010 - 18:00:03 CEST