From fdcb9e92d64ce004cec8851438c1cdbef0c25064 Mon Sep 17 00:00:00 2001
From: Chris Allegretta <chrisa@asty.org>
Date: Wed, 12 Feb 2003 02:52:04 +0000
Subject: [PATCH] - Memory leak fixes for files.c:do_insertfile(),do_browser(),
 nano.c:do_spell(), and search.c:do_replace() (David Benbennick)

git-svn-id: svn://svn.savannah.gnu.org/nano/trunk/nano@1449 35c25a1d-7b9e-4130-9fde-d3aeb78583b8
---
 ChangeLog |  2 ++
 files.c   |  7 +++++--
 nano.c    | 12 +++++-------
 search.c  |  1 +
 4 files changed, 13 insertions(+), 9 deletions(-)

diff --git a/ChangeLog b/ChangeLog
index ccc9fbbd..2de88eee 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -11,6 +11,8 @@ CVS code
 	  (David Benbennick).
 	- Change ngettext macro to P_(), to avoid a clash with the reserved C
 	  __ identifier (Jordi).
+	- Memory leak fixes for files.c:do_insertfile(),do_browser(),
+	  nano.c:do_spell(), and search.c:do_replace() (David Benbennick).
 - files.c:
   cwd_tab_completion()
 	- Memory leak fix (David Benbennick).
diff --git a/files.c b/files.c
index b5c68477..db4e5faa 100644
--- a/files.c
+++ b/files.c
@@ -503,9 +503,10 @@ int do_insertfile(int loading_file)
 	if (i == NANO_TOFILES_KEY) {
 	    char *tmp = do_browse_from(answer);
 
-	    if (tmp != NULL)
+	    if (tmp != NULL) {
+		free(answer);
 		answer = tmp;
-	    else
+	    } else
 		goto start_again;
 	}
 #endif
@@ -2718,6 +2719,8 @@ char *do_browser(const char *inpath)
 	    }
 
 	    /* Start over again with the new path value */
+	    free_charptrarray(filelist, numents);
+	    free(foo);
 	    free(path);
 	    path = new_path;
 	    return do_browser(path);
diff --git a/nano.c b/nano.c
index 591d2887..e6ce86e5 100644
--- a/nano.c
+++ b/nano.c
@@ -1976,7 +1976,7 @@ int do_spell(void)
     nano_disabled_msg();
     return TRUE;
 #else
-    char *temp, *spell_msg = _("Generic error");
+    char *temp, *spell_msg;
 
     if ((temp = safe_tempnam(0, "nano.")) == NULL) {
 	statusbar(_("Could not create a temporary filename: %s"),
@@ -2001,17 +2001,15 @@ int do_spell(void)
     else
 	spell_msg = do_int_speller(temp);
     remove(temp);
+    free(temp);
 
-    if (spell_msg == NULL) {
-	statusbar(_("Finished checking spelling"));
-	return 1;
-    } else {
+    if (spell_msg != NULL) {
 	statusbar(_("Spell checking failed: %s"), spell_msg);
 	return 0;
     }
 
-    free(temp);
-
+    statusbar(_("Finished checking spelling"));
+    return 1;
 #endif
 }
 
diff --git a/search.c b/search.c
index 0a074e59..ebf3fe8b 100644
--- a/search.c
+++ b/search.c
@@ -763,6 +763,7 @@ int do_replace(void)
     else
 	not_found_msg(prevanswer);
 
+    free(prevanswer);
     replace_abort();
     return 1;
 }
-- 
GitLab