From e434b4514854e2a8b7c27f577e2f634c7eabc0e1 Mon Sep 17 00:00:00 2001
From: Chris Allegretta <chrisa@asty.org>
Date: Sat, 27 Jan 2001 19:25:00 +0000
Subject: [PATCH] do_alt_speller and nanogetstr fixes

git-svn-id: svn://svn.savannah.gnu.org/nano/trunk/nano@508 35c25a1d-7b9e-4130-9fde-d3aeb78583b8
---
 ChangeLog |  4 ++++
 nano.c    | 29 ++++++++++++++---------------
 winio.c   |  2 ++
 3 files changed, 20 insertions(+), 15 deletions(-)

diff --git a/ChangeLog b/ChangeLog
index 5465a5a6..db9976ff 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -27,6 +27,10 @@ General
 	- Messy loops replaced with memset calls (Rocco).
   do_alt_speller()
 	- Added code to parse multi-word alt_speller strings.
+	- Fix initialization before fork()  (Rocco).
+- winio.c:
+  nanogetstr()
+	- Sanity check for x overrunning the string buffer len.
 
 nano 0.9.99pre1 - 01/17/2001
 General
diff --git a/nano.c b/nano.c
index 6df7ced9..c4544168 100644
--- a/nano.c
+++ b/nano.c
@@ -1322,24 +1322,23 @@ int do_alt_speller(char *file_name)
 
     endwin();
 
-    /* Start a new process for the alternate speller */
+    /* Set up an argument list to pass the execvp function */
+    if (spellargs == NULL) {
+	spellargs = nmalloc(arglen * sizeof(char *));
+
+	spellargs[0] = strtok(alt_speller, " ");
+	while ((ptr = strtok(NULL, " ")) != NULL) {
+	    arglen++;
+	    spellargs = nrealloc(spellargs, arglen * sizeof(char *));
+	    spellargs[arglen - 3] = ptr;
+	}
+	spellargs[arglen - 1] = NULL;
+    }
+    spellargs[arglen - 2] = file_name;
 
+    /* Start a new process for the alternate speller */
     if ( (pid_spell = fork()) == 0) {
 
-	/* Set up an argument list to pass the execvp function */
-	if (spellargs == NULL) {
-	    spellargs = nmalloc(arglen * sizeof(char *));
-
-	    spellargs[0] = strtok(alt_speller, " ");
-	    while ((ptr = strtok(NULL, " ")) != NULL) {
-		arglen++;
-		spellargs = nrealloc(spellargs, arglen * sizeof(char *));
-		spellargs[arglen - 3] = ptr;
-	    }
-	    spellargs[arglen - 1] = NULL;
-	}
-	spellargs[arglen - 2] = file_name;
-
 	/* Start alternate spell program, we are using the PATH here!?!? */
 	execvp(spellargs[0], spellargs);
 
diff --git a/winio.c b/winio.c
index 06e65308..5f10bf71 100644
--- a/winio.c
+++ b/winio.c
@@ -353,6 +353,8 @@ int nanogetstr(int allowtabs, char *buf, char *def, shortcut s[], int slen,
 		inputbuf = input_tab(inputbuf, (x - x_left), 
 				&tabbed, &shift);
 		x += shift;
+		if (x - x_left > strlen(inputbuf))
+		    x = strlen(inputbuf) + x_left;
 		nanoget_repaint(buf, inputbuf, x);
 	    }
 	    break;
-- 
GitLab