pidgin/ljfisher-ssl-client-auth

Parents 8a6873e1920c
Children 15b977ffc25d
dnssrv: Proper memory management here, which stops random crashes elsewhere.

'query' is owned by the query_data, so must not be freed.
--- 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) {