]> granicus.if.org Git - neomutt/commitdiff
Fix a couple memory leaks in pattern.c
authorKevin McCarthy <kevin@8t8.us>
Thu, 18 Jan 2018 02:57:49 +0000 (18:57 -0800)
committerRichard Russon <rich@flatcap.org>
Thu, 18 Jan 2018 23:31:42 +0000 (23:31 +0000)
BUFFER.data was not being freed in a couple cases.

The pattern and simple search were not being freed if imap_search()
failed.

pattern.c

index a1a4afb8ff16af80e3f73694b2645ae26b94e039..a7102735402bc19af6a362a0777521f16d8fcf75 100644 (file)
--- a/pattern.c
+++ b/pattern.c
@@ -1892,6 +1892,7 @@ int mutt_pattern_func(int op, char *prompt)
   struct Pattern *pat = NULL;
   char buf[LONG_STRING] = "", *simple = NULL;
   struct Buffer err;
+  int rc = -1;
   struct Progress progress;
 
   mutt_str_strfcpy(buf, NONULL(Context->pattern), sizeof(buf));
@@ -1910,15 +1911,13 @@ int mutt_pattern_func(int op, char *prompt)
   pat = mutt_pattern_comp(buf, MUTT_FULL_MSG, &err);
   if (!pat)
   {
-    FREE(&simple);
     mutt_error("%s", err.data);
-    FREE(&err.data);
-    return -1;
+    goto bail;
   }
 
 #ifdef USE_IMAP
   if (Context->magic == MUTT_IMAP && imap_search(Context, pat) < 0)
-    return -1;
+    goto bail;
 #endif
 
   mutt_progress_init(&progress, _("Executing command on matching messages..."),
@@ -1997,11 +1996,15 @@ int mutt_pattern_func(int op, char *prompt)
       Context->limit_pattern = mutt_pattern_comp(buf, MUTT_FULL_MSG, &err);
     }
   }
+
+  rc = 0;
+
+bail:
   FREE(&simple);
   mutt_pattern_free(&pat);
   FREE(&err.data);
 
-  return 0;
+  return rc;
 }
 
 int mutt_search_command(int cur, int op)
@@ -2051,6 +2054,7 @@ int mutt_search_command(int cur, int op)
         LastSearch[0] = '\0';
         return -1;
       }
+      FREE(&err.data);
       mutt_clear_error();
     }
   }