# HG changeset patch # User Paul Aurich # Date 1310933293 0 # Node ID 451242c455ca01afb21cbbdc72449dd753fae315 # Parent 4739488955a7ab91124c541889e30beb36e2a509 dnssrv: Proper memory management here, which stops random crashes elsewhere. 'query' is owned by the query_data, so must not be freed. diff -r 4739488955a7 -r 451242c455ca libpurple/dnssrv.c --- a/libpurple/dnssrv.c Sun Jul 17 17:23:17 2011 +0000 +++ b/libpurple/dnssrv.c Sun Jul 17 20:08:13 2011 +0000 @@ -748,6 +748,7 @@ if(pipe(in) || pipe(out)) { purple_debug_error("dnssrv", "Could not create pipe\n"); g_free(query); + g_free(query_data); cb(NULL, 0, extradata); return NULL; } @@ -755,8 +756,9 @@ pid = fork(); if (pid == -1) { purple_debug_error("dnssrv", "Could not create process!\n"); + g_free(query); + g_free(query_data); cb(NULL, 0, extradata); - g_free(query); return NULL; } @@ -764,6 +766,7 @@ if (pid == 0) { g_free(query); + g_free(query_data); close(out[0]); close(in[1]); @@ -786,8 +789,6 @@ query_data->fd_in = in[1]; query_data->handle = purple_input_add(out[0], PURPLE_INPUT_READ, resolved, query_data); - g_free(query); - return query_data; #else if (!initialized) { @@ -883,6 +884,7 @@ if(pipe(in) || pipe(out)) { purple_debug_error("dnssrv", "Could not create pipe\n"); g_free(query); + g_free(query_data); cb(NULL, extradata); return NULL; } @@ -890,8 +892,9 @@ pid = fork(); if (pid == -1) { purple_debug_error("dnssrv", "Could not create process!\n"); + g_free(query); + g_free(query_data); cb(NULL, extradata); - g_free(query); return NULL; } @@ -899,6 +902,7 @@ if (pid == 0) { g_free(query); + g_free(query_data); close(out[0]); close(in[1]); @@ -921,8 +925,6 @@ query_data->fd_in = in[1]; query_data->handle = purple_input_add(out[0], PURPLE_INPUT_READ, resolved, query_data); - g_free(query); - return query_data; #else if (!initialized) {