svn commit: r342880 - in head/bin/sh: . tests/expansion

Dag-Erling Smørgrav des at FreeBSD.org
Wed Jan 9 09:36:55 UTC 2019


Author: des
Date: Wed Jan  9 09:36:54 2019
New Revision: 342880
URL: https://svnweb.freebsd.org/changeset/base/342880

Log:
  Fix an edge case when parsing large numbers which resulted in inconsistent
  results between an expression that refers to a variable by name and the
  same expression that includes the same variable by value.
  
  Submitted by:	se@
  MFC after:	1 week

Added:
  head/bin/sh/tests/expansion/arith15.0   (contents, props changed)
Modified:
  head/bin/sh/shell.h
  head/bin/sh/tests/expansion/Makefile

Modified: head/bin/sh/shell.h
==============================================================================
--- head/bin/sh/shell.h	Wed Jan  9 06:36:57 2019	(r342879)
+++ head/bin/sh/shell.h	Wed Jan  9 09:36:54 2019	(r342880)
@@ -59,8 +59,7 @@
  */
 typedef intmax_t arith_t;
 #define	ARITH_FORMAT_STR  "%" PRIdMAX
-#define	atoarith_t(arg)  strtoimax(arg, NULL, 0)
-#define	strtoarith_t(nptr, endptr, base)  strtoimax(nptr, endptr, base)
+#define	strtoarith_t(nptr, endptr, base)  (intmax_t)strtoumax(nptr, endptr, base)
 #define	ARITH_MIN INTMAX_MIN
 #define	ARITH_MAX INTMAX_MAX
 

Modified: head/bin/sh/tests/expansion/Makefile
==============================================================================
--- head/bin/sh/tests/expansion/Makefile	Wed Jan  9 06:36:57 2019	(r342879)
+++ head/bin/sh/tests/expansion/Makefile	Wed Jan  9 09:36:54 2019	(r342880)
@@ -21,6 +21,7 @@ ${PACKAGE}FILES+=	arith11.0
 ${PACKAGE}FILES+=	arith12.0
 ${PACKAGE}FILES+=	arith13.0
 ${PACKAGE}FILES+=	arith14.0
+${PACKAGE}FILES+=	arith15.0
 ${PACKAGE}FILES+=	assign1.0
 ${PACKAGE}FILES+=	cmdsubst1.0
 ${PACKAGE}FILES+=	cmdsubst2.0

Added: head/bin/sh/tests/expansion/arith15.0
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ head/bin/sh/tests/expansion/arith15.0	Wed Jan  9 09:36:54 2019	(r342880)
@@ -0,0 +1,20 @@
+# $FreeBSD$
+
+failures=0
+
+check() {
+	if [ $(($1)) != $2 ]; then
+		failures=$((failures+1))
+		echo "For $1, expected $2 actual $(($1))"
+	fi
+}
+
+XXX=-9223372036854775808
+check "XXX"		-9223372036854775808
+check "XXX - 1" 	9223372036854775807
+check $(($XXX - 1))	9223372036854775807
+check $(($XXX - 2))	9223372036854775806
+check $((0x8000000000000000 == 0x7fffffffffffffff)) \
+			0
+
+exit $((failures != 0))


More information about the svn-src-head mailing list