From fc0818fef35247b0a1ae0ecd38aae590bc15b5c2 Mon Sep 17 00:00:00 2001 From: Jilles Tjoelker Date: Wed, 4 May 2011 21:49:34 +0000 Subject: [PATCH] sh: Detect an error for ${#var}. In particular, this makes things like ${#foo[0]} and ${#foo[@]} errors rather than silent equivalents of ${#foo}. PR: bin/151720 Submitted by: Mark Johnston Exp-run done by: pav (with some other sh(1) changes) --- bin/sh/parser.c | 2 ++ tools/regression/bin/sh/errors/bad-parm-exp6.2 | 2 ++ tools/regression/bin/sh/errors/bad-parm-exp6.2.stderr | 1 + 3 files changed, 5 insertions(+) create mode 100644 tools/regression/bin/sh/errors/bad-parm-exp6.2 create mode 100644 tools/regression/bin/sh/errors/bad-parm-exp6.2.stderr diff --git a/bin/sh/parser.c b/bin/sh/parser.c index c4191b4ea18..43822f934d6 100644 --- a/bin/sh/parser.c +++ b/bin/sh/parser.c @@ -1569,6 +1569,8 @@ varname: } } } else if (subtype != VSERROR) { + if (subtype == VSLENGTH && c != '}') + subtype = VSERROR; pungetc(); } STPUTC('=', out); diff --git a/tools/regression/bin/sh/errors/bad-parm-exp6.2 b/tools/regression/bin/sh/errors/bad-parm-exp6.2 new file mode 100644 index 00000000000..ba51442fb7f --- /dev/null +++ b/tools/regression/bin/sh/errors/bad-parm-exp6.2 @@ -0,0 +1,2 @@ +# $FreeBSD$ +${#foo^} diff --git a/tools/regression/bin/sh/errors/bad-parm-exp6.2.stderr b/tools/regression/bin/sh/errors/bad-parm-exp6.2.stderr new file mode 100644 index 00000000000..dbf14b596e1 --- /dev/null +++ b/tools/regression/bin/sh/errors/bad-parm-exp6.2.stderr @@ -0,0 +1 @@ +./errors/bad-parm-exp6.2: ${foo...}: Bad substitution