Module Name:    src
Committed By:   christos
Date:           Wed Feb  3 05:26:16 UTC 2016

Modified Files:
        src/bin/ksh: vi.c

Log Message:
PR/50747: David Binderman: check bounds before dereference.
While here add some continues before semicolons.


To generate a diff of this commit:
cvs rdiff -u -r1.12 -r1.13 src/bin/ksh/vi.c

Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.

Modified files:

Index: src/bin/ksh/vi.c
diff -u src/bin/ksh/vi.c:1.12 src/bin/ksh/vi.c:1.13
--- src/bin/ksh/vi.c:1.12	Tue Jun 21 23:56:17 2011
+++ src/bin/ksh/vi.c	Wed Feb  3 00:26:16 2016
@@ -1,4 +1,4 @@
-/*	$NetBSD: vi.c,v 1.12 2011/06/22 03:56:17 mrg Exp $	*/
+/*	$NetBSD: vi.c,v 1.13 2016/02/03 05:26:16 christos Exp $	*/
 
 /*
  *	vi command editing
@@ -9,7 +9,7 @@
 #include <sys/cdefs.h>
 
 #ifndef lint
-__RCSID("$NetBSD: vi.c,v 1.12 2011/06/22 03:56:17 mrg Exp $");
+__RCSID("$NetBSD: vi.c,v 1.13 2016/02/03 05:26:16 christos Exp $");
 #endif
 
 #include "config.h"
@@ -835,7 +835,7 @@ vi_cmd(argcnt, cmd)
 						(cmd[1]=='w' || cmd[1]=='W') &&
 						!isspace((unsigned char)es->cbuf[es->cursor])) {
 					while (isspace((unsigned char)es->cbuf[--ncursor]))
-						;
+						continue;
 					ncursor++;
 				}
 				if (ncursor > es->cursor) {
@@ -865,7 +865,7 @@ vi_cmd(argcnt, cmd)
 			if (es->linelen != 0)
 				es->cursor++;
 			while (putbuf(ybuf, yanklen, 0) == 0 && --argcnt > 0)
-				;
+				continue;
 			if (es->cursor != 0)
 				es->cursor--;
 			if (argcnt != 0)
@@ -1572,15 +1572,16 @@ forwword(argcnt)
 	ncursor = es->cursor;
 	while (ncursor < es->linelen && argcnt--) {
 		if (is_wordch(es->cbuf[ncursor]))
-			while (is_wordch(es->cbuf[ncursor]) &&
-					ncursor < es->linelen)
+			while (ncursor < es->linelen &&
+			    is_wordch(es->cbuf[ncursor]))
 				ncursor++;
 		else if (!isspace((unsigned char)es->cbuf[ncursor]))
-			while (!is_wordch(es->cbuf[ncursor]) &&
-					!isspace((unsigned char)es->cbuf[ncursor]) &&
-					ncursor < es->linelen)
+			while (ncursor < es->linelen &&
+			    !is_wordch(es->cbuf[ncursor]) &&
+			    !isspace((unsigned char)es->cbuf[ncursor]))
 				ncursor++;
-		while (isspace((unsigned char)es->cbuf[ncursor]) && ncursor < es->linelen)
+		while (ncursor < es->linelen &&
+		    isspace((unsigned char)es->cbuf[ncursor]))
 			ncursor++;
 	}
 	return ncursor;
@@ -1595,17 +1596,17 @@ backword(argcnt)
 	ncursor = es->cursor;
 	while (ncursor > 0 && argcnt--) {
 		while (--ncursor > 0 && isspace((unsigned char)es->cbuf[ncursor]))
-			;
+			continue;
 		if (ncursor > 0) {
 			if (is_wordch(es->cbuf[ncursor]))
 				while (--ncursor >= 0 &&
 				   is_wordch(es->cbuf[ncursor]))
-					;
+					continue;
 			else
 				while (--ncursor >= 0 &&
 				   !is_wordch(es->cbuf[ncursor]) &&
 				   !isspace((unsigned char)es->cbuf[ncursor]))
-					;
+					continue;
 			ncursor++;
 		}
 	}
@@ -1621,18 +1622,18 @@ endword(argcnt)
 	ncursor = es->cursor;
 	while (ncursor < es->linelen && argcnt--) {
 		while (++ncursor < es->linelen - 1 &&
-				isspace((unsigned char)es->cbuf[ncursor]))
-			;
+		    isspace((unsigned char)es->cbuf[ncursor]))
+			continue;
 		if (ncursor < es->linelen - 1) {
 			if (is_wordch(es->cbuf[ncursor]))
 				while (++ncursor < es->linelen &&
-					  is_wordch(es->cbuf[ncursor]))
-					;
+				    is_wordch(es->cbuf[ncursor]))
+					continue;
 			else
 				while (++ncursor < es->linelen &&
 				   !is_wordch(es->cbuf[ncursor]) &&
 				   !isspace((unsigned char)es->cbuf[ncursor]))
-					;
+					continue;
 			ncursor--;
 		}
 	}
@@ -1647,9 +1648,11 @@ Forwword(argcnt)
 
 	ncursor = es->cursor;
 	while (ncursor < es->linelen && argcnt--) {
-		while (!isspace((unsigned char)es->cbuf[ncursor]) && ncursor < es->linelen)
+		while (ncursor < es->linelen &&
+		    !isspace((unsigned char)es->cbuf[ncursor]))
 			ncursor++;
-		while (isspace((unsigned char)es->cbuf[ncursor]) && ncursor < es->linelen)
+		while (ncursor < es->linelen &&
+		    isspace((unsigned char)es->cbuf[ncursor]))
 			ncursor++;
 	}
 	return ncursor;
@@ -1664,7 +1667,7 @@ Backword(argcnt)
 	ncursor = es->cursor;
 	while (ncursor > 0 && argcnt--) {
 		while (--ncursor >= 0 && isspace((unsigned char)es->cbuf[ncursor]))
-			;
+			continue;
 		while (ncursor >= 0 && !isspace((unsigned char)es->cbuf[ncursor]))
 			ncursor--;
 		ncursor++;
@@ -1681,12 +1684,12 @@ Endword(argcnt)
 	ncursor = es->cursor;
 	while (ncursor < es->linelen - 1 && argcnt--) {
 		while (++ncursor < es->linelen - 1 &&
-				isspace((unsigned char)es->cbuf[ncursor]))
-			;
+		    isspace((unsigned char)es->cbuf[ncursor]))
+			continue;
 		if (ncursor < es->linelen - 1) {
 			while (++ncursor < es->linelen &&
-					!isspace((unsigned char)es->cbuf[ncursor]))
-				;
+			    !isspace((unsigned char)es->cbuf[ncursor]))
+				continue;
 			ncursor--;
 		}
 	}

Reply via email to