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--;
}
}