zsh-workers
 help / color / mirror / code / Atom feed
* PATCH: spelling correction buffer overflow
@ 2018-03-26 22:39 Oliver Kiddle
  2018-03-27 21:55 ` Kamil Dudka
  0 siblings, 1 reply; 7+ messages in thread
From: Oliver Kiddle @ 2018-03-26 22:39 UTC (permalink / raw)
  To: Zsh workers

In utils.c:spname(), there's no checking on newname[] for overflows in
two out the of three places where it is appended to.

returning NULL appears to abort the command-line rather than aborting
only correction which is perhaps not ideal but the aim here is not to
corrupt other bits of memory.

This also tweaks the struncpy() function I updated in the earlier patch.

Oliver

diff --git a/Src/utils.c b/Src/utils.c
index 998b16220..9ea34ab54 100644
--- a/Src/utils.c
+++ b/Src/utils.c
@@ -2283,7 +2283,8 @@ struncpy(char **s, char *t, int n)
 {
     char *u = *s;
 
-    while (n-- && (*u++ = *t++));
+    while (n-- && (*u = *t++))
+	u++;
     *s = u;
     if (n > 0) /* just one null-byte will do, unlike strncpy(3) */
 	*u = '\0';
@@ -4420,17 +4421,20 @@ spname(char *oldname)
 	     * odd to the human reader, and we may make use of the total  *
 	     * distance for all corrections at some point in the future.  */
 	    if (bestdist < maxthresh) {
-		strcpy(new, spnameguess);
-		strcat(new, old);
-		return newname;
+		struncpy(&new, spnameguess, sizeof(newname) - (new - newname));
+		struncpy(&new, old, sizeof(newname) - (new - newname));
+		return (new - newname) >= (sizeof(newname)-1) ? NULL : newname;
 	    } else
 	    	return NULL;
 	} else {
 	    maxthresh = bestdist + thresh;
 	    bestdist += thisdist;
 	}
-	for (p = spnamebest; (*new = *p++);)
+	for (p = spnamebest; (*new = *p++);) {
+	    if ((new - newname) >= (sizeof(newname)-1))
+		return NULL;
 	    new++;
+	}
     }
 }
 


^ permalink raw reply	[flat|nested] 7+ messages in thread

end of thread, other threads:[~2018-03-29  8:42 UTC | newest]

Thread overview: 7+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2018-03-26 22:39 PATCH: spelling correction buffer overflow Oliver Kiddle
2018-03-27 21:55 ` Kamil Dudka
2018-03-27 23:10   ` Bart Schaefer
2018-03-28  8:01     ` Kamil Dudka
2018-03-28 11:20   ` Kamil Dudka
2018-03-28 14:07     ` Oliver Kiddle
2018-03-29  8:42       ` Kamil Dudka

Code repositories for project(s) associated with this public inbox

	https://git.vuxu.org/mirror/zsh/

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).