Module Name:    src
Committed By:   kre
Date:           Sun Jul  3 06:30:31 UTC 2022

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

Log Message:
Fix core dump caused by
        ksh -c '(i=10; echo $((++-+++i)))'
reported by Steffen Nurpmeso (not on a NetBSD list or PR).

Seems pointless to fix just one of the bugs in this thing, but this one was
easy enough (and stupid enough).   (The "i=10" part is unimportant, as is the 
sub-shell).


To generate a diff of this commit:
cvs rdiff -u -r1.12 -r1.13 src/bin/ksh/expr.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/expr.c
diff -u src/bin/ksh/expr.c:1.12 src/bin/ksh/expr.c:1.13
--- src/bin/ksh/expr.c:1.12	Tue May  8 16:37:59 2018
+++ src/bin/ksh/expr.c	Sun Jul  3 06:30:31 2022
@@ -1,4 +1,4 @@
-/*	$NetBSD: expr.c,v 1.12 2018/05/08 16:37:59 kamil Exp $	*/
+/*	$NetBSD: expr.c,v 1.13 2022/07/03 06:30:31 kre Exp $	*/
 
 /*
  * Korn expression evaluation
@@ -9,7 +9,7 @@
 #include <sys/cdefs.h>
 
 #ifndef lint
-__RCSID("$NetBSD: expr.c,v 1.12 2018/05/08 16:37:59 kamil Exp $");
+__RCSID("$NetBSD: expr.c,v 1.13 2022/07/03 06:30:31 kre Exp $");
 #endif
 
 
@@ -311,6 +311,8 @@ evalexpr(es, prec)
 			token(es);
 		} else if (op == O_PLUSPLUS || op == O_MINUSMINUS) {
 			token(es);
+			if (es->tok != VAR)
+				evalerr(es, ET_LVALUE, opinfo[(int) op].name);
 			vl = do_ppmm(es, op, es->val, true);
 			token(es);
 		} else if (op == VAR || op == LIT) {

Reply via email to