summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--regress/usr.bin/xargs/Makefile7
-rwxr-xr-xregress/usr.bin/xargs/xargs-copy.sh33
2 files changed, 39 insertions, 1 deletions
diff --git a/regress/usr.bin/xargs/Makefile b/regress/usr.bin/xargs/Makefile
index b2ad896bb55..4f6fbe86169 100644
--- a/regress/usr.bin/xargs/Makefile
+++ b/regress/usr.bin/xargs/Makefile
@@ -1,4 +1,6 @@
-# $OpenBSD: Makefile,v 1.3 2017/10/16 13:48:22 anton Exp $
+# $OpenBSD: Makefile,v 1.4 2017/10/16 13:52:50 anton Exp $
+
+REGRESS_TARGETS=run-regress-showargs run-regress-copyargs
XARGS= /usr/bin/xargs
@@ -7,4 +9,7 @@ PROG= showargs
run-regress-showargs:
sh ${.CURDIR}/xargs-L.sh ${XARGS}
+run-regress-copyargs:
+ sh ${.CURDIR}/xargs-copy.sh ${XARGS}
+
.include <bsd.regress.mk>
diff --git a/regress/usr.bin/xargs/xargs-copy.sh b/regress/usr.bin/xargs/xargs-copy.sh
new file mode 100755
index 00000000000..f771d745274
--- /dev/null
+++ b/regress/usr.bin/xargs/xargs-copy.sh
@@ -0,0 +1,33 @@
+#!/bin/sh
+#
+# $OpenBSD: xargs-copy.sh,v 1.1 2017/10/16 13:52:50 anton Exp $
+#
+# Copyright (c) 2017 Anton Lindqvist <anton@openbsd.org>
+#
+# Permission to use, copy, modify, and distribute this software for any
+# purpose with or without fee is hereby granted, provided that the above
+# copyright notice and this permission notice appear in all copies.
+#
+# THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+# WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+# MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+# ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+# WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+# ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+# OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+
+# Regression caused by usage of memcpy() instead of memmove().
+# Including the second argument causes the arguments to exceed the size
+# constraints.
+# It's therefore copied and later used as the first argument in the second
+# invocation of the default utility.
+
+arg_max() {
+ printf '#include <limits.h>\nARG_MAX\n' | cc -E - | tail -1 | bc
+}
+
+XARGS=${1:-/usr/bin/xargs}
+
+# ARG_MAX - 4K - strlen("/bin/echo") - strlen("x\n")
+n=$(($(arg_max) - 4*1024 - 9 - 2))
+(echo x; jot -b x -s '' $n) | env -i $XARGS >/dev/null