From d97649859dc9058443bcb77f3abdf94877240b01 Mon Sep 17 00:00:00 2001
From: David Lawrence Ramsey <pooka109@gmail.com>
Date: Mon, 27 Nov 2006 04:57:22 +0000
Subject: [PATCH] in do_insertfile(), properly handle files that contain nulls

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

diff --git a/ChangeLog b/ChangeLog
index 6b9e4056..564d0ecb 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -3,7 +3,8 @@ CVS code -
 	- Miscellaneous comment fixes. (DLR)
 - files.c:
   do_insertfile()
-	- Properly handle executable commands that contain nulls. (DLR)
+	- Properly handle files and executable commands that contain
+	  nulls. (DLR)
 - nano.h:
 	- Rename NANO_ALT_REPLACE_KEY to NANO_REPLACE_ALTKEY, for
 	  consistency. (DLR)
diff --git a/src/files.c b/src/files.c
index 793c9b28..c22b5d33 100644
--- a/src/files.c
+++ b/src/files.c
@@ -683,7 +683,7 @@ void do_insertfile(
     char *ans = mallocstrcpy(NULL, "");
 	/* The last answer the user typed on the statusbar. */
     filestruct *edittop_save = openfile->edittop;
-    size_t current_x_save = openfile->current_x;
+    size_t current_x_save = openfile->current_x, answer_len;
     ssize_t current_y_save = openfile->current_y;
     bool at_edittop = FALSE;
 	/* Whether we're at the top of the edit window. */
@@ -800,27 +800,23 @@ void do_insertfile(
 	    }
 #endif
 
+	    answer_len = strlen(answer);
+
+	    /* Convert newlines to nulls, just before we execute a
+	     * command. */
+	    sunder(answer);
+
 #ifndef NANO_TINY
 	    if (execute) {
-		size_t answer_len = strlen(answer);
-
 #ifdef ENABLE_MULTIBUFFER
 		if (ISSET(MULTIBUFFER))
 		    /* Open a blank buffer. */
 		    open_buffer("");
 #endif
 
-		/* Convert newlines to nulls, just before we execute a
-		 * command. */
-		sunder(answer);
-
 		/* Save the command's output in the current buffer. */
 		execute_command(answer);
 
-		/* Convert nulls to newlines.  answer_len is answer's
-		 * real length. */
-		unsunder(answer, answer_len);
-
 #ifdef ENABLE_MULTIBUFFER
 		if (ISSET(MULTIBUFFER)) {
 		    /* Move back to the beginning of the first line of
@@ -844,6 +840,10 @@ void do_insertfile(
 	    }
 #endif
 
+	    /* Convert nulls to newlines.  answer_len is answer's real
+	     * length. */
+	    unsunder(answer, answer_len);
+
 #ifdef ENABLE_MULTIBUFFER
 	    if (ISSET(MULTIBUFFER))
 		/* Update the screen to account for the current
-- 
GitLab