summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rwxr-xr-xtests/stack-overflow23
1 files changed, 16 insertions, 7 deletions
diff --git a/tests/stack-overflow b/tests/stack-overflow
index 2042ebc5..69220455 100755
--- a/tests/stack-overflow
+++ b/tests/stack-overflow
@@ -3,14 +3,23 @@
. "${srcdir=.}/init.sh"; path_prepend_ ../src
-# Too many open parentheses.
-printf %080000d 0|tr 0 '(' > in || framework_failure_
echo grep: stack overflow > exp || framework_failure_
+# grep attempts to detect overflow via gnulib's c-stack module.
+# Trigger that with an input regex composed solely of open parentheses,
+# increasing the size of that input until grep emits the expected diagnostic.
fail=0
-returns_ 2 grep -E -f in >out 2>err || fail=1
+for i in 1 3 5 10 20 30 40 50 100 200; do
+ # Create a file containing $i * 10000 open parentheses:
+ printf %0${i}0000d 0|tr 0 '(' > in || framework_failure_
+ grep -E -f in >out 2>err; st=$?
+ if grep -q 'stack overflow' err; then
+ test $st = 2 || fail=1
+ compare /dev/null out || fail=1
+ compare exp err || fail=1
+ test $fail = 0 && Exit 0
+ fail_ 'printed "stack overflow", but something else was wrong'
+ fi
+done
-compare /dev/null out || fail=1
-compare exp err || fail=1
-
-Exit $fail
+fail_ 'grep never printed "stack overflow"'