changeset: 6375:45fbc40193aa
user: Kevin McCarthy <[email protected]>
date: Fri Oct 10 14:17:09 2014 +0800
link: http://dev.mutt.org/hg/mutt/rev/45fbc40193aa
Fix a memory leak in mutt_query_complete.
When a single result was returned, it was written to the buffer and
returned, but the query result was never freed.
This patch creates a free_query function and changes the code to use
that everywhere.
diffs (73 lines):
diff -r b1ef16f25425 -r 45fbc40193aa query.c
--- a/query.c Thu Aug 21 18:41:07 2014 -0700
+++ b/query.c Fri Oct 10 14:17:09 2014 +0800
@@ -70,6 +70,25 @@
return tmp;
}
+static void free_query (QUERY **query)
+{
+ QUERY *p;
+
+ if (!query)
+ return;
+
+ while (*query)
+ {
+ p = *query;
+ *query = (*query)->next;
+
+ rfc822_free_address (&p->addr);
+ FREE (&p->name);
+ FREE (&p->other);
+ FREE (&p);
+ }
+}
+
static QUERY *run_query (char *s, int quiet)
{
FILE *fp;
@@ -258,6 +277,7 @@
buf[0] = '\0';
rfc822_write_address (buf, buflen, tmpa, 0);
rfc822_free_address (&tmpa);
+ free_query (&results);
mutt_clear_error ();
return (0);
}
@@ -348,16 +368,7 @@
if (op == OP_QUERY)
{
- queryp = results;
- while (queryp)
- {
- rfc822_free_address (&queryp->addr);
- FREE (&queryp->name);
- FREE (&queryp->other);
- results = queryp->next;
- FREE (&queryp);
- queryp = results;
- }
+ free_query (&results);
results = newresults;
FREE (&QueryTable);
}
@@ -520,16 +531,7 @@
}
- queryp = results;
- while (queryp)
- {
- rfc822_free_address (&queryp->addr);
- FREE (&queryp->name);
- FREE (&queryp->other);
- results = queryp->next;
- FREE (&queryp);
- queryp = results;
- }
+ free_query (&results);
FREE (&QueryTable);
/* tell whoever called me to redraw the screen when I return */