Module Name: src Committed By: kre Date: Sun Dec 17 04:06:03 UTC 2017
Modified Files: src/bin/sh: arith_token.c Log Message: Do a better job of reporting invalid numeric constants in arithmetic exprs. For example, given $(( 08 + 1 )) (or similar) instead of reporting "expecting end of expression" - the generic error for parse failed, which happened as this was parsed as $(( 0 8 + 1 )) because the 8 could not be a part of an octal constant, and that expr makes no sense - instead say "unexpected '8' (out of range) in numeric constant: 08" which makes the cause of the error more obvious. NFC for valid expressions, just the error message (and the way the error is detected). To generate a diff of this commit: cvs rdiff -u -r1.6 -r1.7 src/bin/sh/arith_token.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/sh/arith_token.c diff -u src/bin/sh/arith_token.c:1.6 src/bin/sh/arith_token.c:1.7 --- src/bin/sh/arith_token.c:1.6 Mon Jul 24 13:21:14 2017 +++ src/bin/sh/arith_token.c Sun Dec 17 04:06:03 2017 @@ -1,4 +1,4 @@ -/* $NetBSD: arith_token.c,v 1.6 2017/07/24 13:21:14 kre Exp $ */ +/* $NetBSD: arith_token.c,v 1.7 2017/12/17 04:06:03 kre Exp $ */ /*- * Copyright (c) 2002 @@ -39,7 +39,7 @@ #include <sys/cdefs.h> #ifndef lint -__RCSID("$NetBSD: arith_token.c,v 1.6 2017/07/24 13:21:14 kre Exp $"); +__RCSID("$NetBSD: arith_token.c,v 1.7 2017/12/17 04:06:03 kre Exp $"); #endif /* not lint */ #include <inttypes.h> @@ -87,6 +87,14 @@ arith_token(void) * strtoimax() stops... */ a_t_val.val = strtoimax(buf, &end, 0); + if (is_in_name(*end)) { + token = *end; + while (is_in_name(*++end)) + continue; + error("arithmetic: unexpected '%c' " + "(out of range) in numeric constant: " + "%.*s", token, (int)(end - buf), buf); + } arith_buf = end; VTRACE(DBG_ARITH, ("Arith token ARITH_NUM=%jd\n", a_t_val.val));