summaryrefslogtreecommitdiff
path: root/gettext-tools/tests/xgettext-sh-stackovfl-4
diff options
context:
space:
mode:
authorBruno Haible <bruno@clisp.org>2023-03-08 19:36:35 +0100
committerBruno Haible <bruno@clisp.org>2023-03-09 11:40:25 +0100
commitbcd08ef4de638f94b511d8365cc178e7180188a9 (patch)
treef10baf2fcfe3b62567b4655531337f2bc18e9aec /gettext-tools/tests/xgettext-sh-stackovfl-4
parent793f539ef3201392ae5e7649f369f97285fbbfe4 (diff)
downloadgettext-bcd08ef4de638f94b511d8365cc178e7180188a9.tar.gz
xgettext: In language Shell, avoid stack overflow.
* gettext-tools/src/x-sh.c (MAX_NESTING_DEPTH): New macro. (nesting_depth): New variable. (read_word): Increase nesting_depth before calling read_command_list recursively. (read_command_list): Check nesting_depth. (extract_sh): Initialize nesting_depth. * gettext-tools/tests/xgettext-shell-stackovfl-1: New file. * gettext-tools/tests/xgettext-shell-stackovfl-2: New file. * gettext-tools/tests/xgettext-shell-stackovfl-3: New file. * gettext-tools/tests/xgettext-shell-stackovfl-4: New file. * gettext-tools/tests/xgettext-shell-stackovfl-5: New file. * gettext-tools/tests/Makefile.am (TESTS): Add them.
Diffstat (limited to 'gettext-tools/tests/xgettext-sh-stackovfl-4')
-rwxr-xr-xgettext-tools/tests/xgettext-sh-stackovfl-478
1 files changed, 78 insertions, 0 deletions
diff --git a/gettext-tools/tests/xgettext-sh-stackovfl-4 b/gettext-tools/tests/xgettext-sh-stackovfl-4
new file mode 100755
index 000000000..ee7c2b33b
--- /dev/null
+++ b/gettext-tools/tests/xgettext-sh-stackovfl-4
@@ -0,0 +1,78 @@
+#! /bin/sh
+. "${srcdir=.}/init.sh"; path_prepend_ . ../src
+
+# Test Shell support: stack overflow prevented by nesting depth check.
+
+cat <<EOF > xg-sh-so-4.sh
+x>(x>(x>(x>(x>(x>(x>(x>(x>(x>(x>(x>(x>(x>(x>(x>(x>(x>(x>(x>(x>(x>(x>(x>(x>(
+x>(x>(x>(x>(x>(x>(x>(x>(x>(x>(x>(x>(x>(x>(x>(x>(x>(x>(x>(x>(x>(x>(x>(x>(x>(
+x>(x>(x>(x>(x>(x>(x>(x>(x>(x>(x>(x>(x>(x>(x>(x>(x>(x>(x>(x>(x>(x>(x>(x>(x>(
+x>(x>(x>(x>(x>(x>(x>(x>(x>(x>(x>(x>(x>(x>(x>(x>(x>(x>(x>(x>(x>(x>(x>(x>(x>(
+x>(x>(x>(x>(x>(x>(x>(x>(x>(x>(x>(x>(x>(x>(x>(x>(x>(x>(x>(x>(x>(x>(x>(x>(x>(
+x>(x>(x>(x>(x>(x>(x>(x>(x>(x>(x>(x>(x>(x>(x>(x>(x>(x>(x>(x>(x>(x>(x>(x>(x>(
+x>(x>(x>(x>(x>(x>(x>(x>(x>(x>(x>(x>(x>(x>(x>(x>(x>(x>(x>(x>(x>(x>(x>(x>(x>(
+x>(x>(x>(x>(x>(x>(x>(x>(x>(x>(x>(x>(x>(x>(x>(x>(x>(x>(x>(x>(x>(x>(x>(x>(x>(
+x>(x>(x>(x>(x>(x>(x>(x>(x>(x>(x>(x>(x>(x>(x>(x>(x>(x>(x>(x>(x>(x>(x>(x>(x>(
+x>(x>(x>(x>(x>(x>(x>(x>(x>(x>(x>(x>(x>(x>(x>(x>(x>(x>(x>(x>(x>(x>(x>(x>(x>(
+x>(x>(x>(x>(x>(x>(x>(x>(x>(x>(x>(x>(x>(x>(x>(x>(x>(x>(x>(x>(x>(x>(x>(x>(x>(
+x>(x>(x>(x>(x>(x>(x>(x>(x>(x>(x>(x>(x>(x>(x>(x>(x>(x>(x>(x>(x>(x>(x>(x>(x>(
+x>(x>(x>(x>(x>(x>(x>(x>(x>(x>(x>(x>(x>(x>(x>(x>(x>(x>(x>(x>(x>(x>(x>(x>(x>(
+x>(x>(x>(x>(x>(x>(x>(x>(x>(x>(x>(x>(x>(x>(x>(x>(x>(x>(x>(x>(x>(x>(x>(x>(x>(
+x>(x>(x>(x>(x>(x>(x>(x>(x>(x>(x>(x>(x>(x>(x>(x>(x>(x>(x>(x>(x>(x>(x>(x>(x>(
+x>(x>(x>(x>(x>(x>(x>(x>(x>(x>(x>(x>(x>(x>(x>(x>(x>(x>(x>(x>(x>(x>(x>(x>(x>(
+x>(x>(x>(x>(x>(x>(x>(x>(x>(x>(x>(x>(x>(x>(x>(x>(x>(x>(x>(x>(x>(x>(x>(x>(x>(
+x>(x>(x>(x>(x>(x>(x>(x>(x>(x>(x>(x>(x>(x>(x>(x>(x>(x>(x>(x>(x>(x>(x>(x>(x>(
+x>(x>(x>(x>(x>(x>(x>(x>(x>(x>(x>(x>(x>(x>(x>(x>(x>(x>(x>(x>(x>(x>(x>(x>(x>(
+x>(x>(x>(x>(x>(x>(x>(x>(x>(x>(x>(x>(x>(x>(x>(x>(x>(x>(x>(x>(x>(x>(x>(x>(x>(
+x>(x>(x>(x>(x>(x>(x>(x>(x>(x>(x>(x>(x>(x>(x>(x>(x>(x>(x>(x>(x>(x>(x>(x>(x>(
+x>(x>(x>(x>(x>(x>(x>(x>(x>(x>(x>(x>(x>(x>(x>(x>(x>(x>(x>(x>(x>(x>(x>(x>(x>(
+x>(x>(x>(x>(x>(x>(x>(x>(x>(x>(x>(x>(x>(x>(x>(x>(x>(x>(x>(x>(x>(x>(x>(x>(x>(
+x>(x>(x>(x>(x>(x>(x>(x>(x>(x>(x>(x>(x>(x>(x>(x>(x>(x>(x>(x>(x>(x>(x>(x>(x>(
+x>(x>(x>(x>(x>(x>(x>(x>(x>(x>(x>(x>(x>(x>(x>(x>(x>(x>(x>(x>(x>(x>(x>(x>(x>(
+x>(x>(x>(x>(x>(x>(x>(x>(x>(x>(x>(x>(x>(x>(x>(x>(x>(x>(x>(x>(x>(x>(x>(x>(x>(
+x>(x>(x>(x>(x>(x>(x>(x>(x>(x>(x>(x>(x>(x>(x>(x>(x>(x>(x>(x>(x>(x>(x>(x>(x>(
+x>(x>(x>(x>(x>(x>(x>(x>(x>(x>(x>(x>(x>(x>(x>(x>(x>(x>(x>(x>(x>(x>(x>(x>(x>(
+x>(x>(x>(x>(x>(x>(x>(x>(x>(x>(x>(x>(x>(x>(x>(x>(x>(x>(x>(x>(x>(x>(x>(x>(x>(
+x>(x>(x>(x>(x>(x>(x>(x>(x>(x>(x>(x>(x>(x>(x>(x>(x>(x>(x>(x>(x>(x>(x>(x>(x>(
+x>(x>(x>(x>(x>(x>(x>(x>(x>(x>(x>(x>(x>(x>(x>(x>(x>(x>(x>(x>(x>(x>(x>(x>(x>(
+x>(x>(x>(x>(x>(x>(x>(x>(x>(x>(x>(x>(x>(x>(x>(x>(x>(x>(x>(x>(x>(x>(x>(x>(x>(
+x>(x>(x>(x>(x>(x>(x>(x>(x>(x>(x>(x>(x>(x>(x>(x>(x>(x>(x>(x>(x>(x>(x>(x>(x>(
+x>(x>(x>(x>(x>(x>(x>(x>(x>(x>(x>(x>(x>(x>(x>(x>(x>(x>(x>(x>(x>(x>(x>(x>(x>(
+x>(x>(x>(x>(x>(x>(x>(x>(x>(x>(x>(x>(x>(x>(x>(x>(x>(x>(x>(x>(x>(x>(x>(x>(x>(
+x>(x>(x>(x>(x>(x>(x>(x>(x>(x>(x>(x>(x>(x>(x>(x>(x>(x>(x>(x>(x>(x>(x>(x>(x>(
+x>(x>(x>(x>(x>(x>(x>(x>(x>(x>(x>(x>(x>(x>(x>(x>(x>(x>(x>(x>(x>(x>(x>(x>(x>(
+x>(x>(x>(x>(x>(x>(x>(x>(x>(x>(x>(x>(x>(x>(x>(x>(x>(x>(x>(x>(x>(x>(x>(x>(x>(
+x>(x>(x>(x>(x>(x>(x>(x>(x>(x>(x>(x>(x>(x>(x>(x>(x>(x>(x>(x>(x>(x>(x>(x>(x>(
+x>(x>(x>(x>(x>(x>(x>(x>(x>(x>(x>(x>(x>(x>(x>(x>(x>(x>(x>(x>(x>(x>(x>(x>(x>(
+x>(
+gettext 'Hello!'
+)
+))))))))))))))))))))))))))))))))))))))))))))))))))
+))))))))))))))))))))))))))))))))))))))))))))))))))
+))))))))))))))))))))))))))))))))))))))))))))))))))
+))))))))))))))))))))))))))))))))))))))))))))))))))
+))))))))))))))))))))))))))))))))))))))))))))))))))
+))))))))))))))))))))))))))))))))))))))))))))))))))
+))))))))))))))))))))))))))))))))))))))))))))))))))
+))))))))))))))))))))))))))))))))))))))))))))))))))
+))))))))))))))))))))))))))))))))))))))))))))))))))
+))))))))))))))))))))))))))))))))))))))))))))))))))
+))))))))))))))))))))))))))))))))))))))))))))))))))
+))))))))))))))))))))))))))))))))))))))))))))))))))
+))))))))))))))))))))))))))))))))))))))))))))))))))
+))))))))))))))))))))))))))))))))))))))))))))))))))
+))))))))))))))))))))))))))))))))))))))))))))))))))
+))))))))))))))))))))))))))))))))))))))))))))))))))
+))))))))))))))))))))))))))))))))))))))))))))))))))
+))))))))))))))))))))))))))))))))))))))))))))))))))
+))))))))))))))))))))))))))))))))))))))))))))))))))
+))))))))))))))))))))))))))))))))))))))))))))))))))
+EOF
+
+: ${XGETTEXT=xgettext}
+${XGETTEXT} --omit-header --no-location -d xg-sh-so-4.tmp xg-sh-so-4.sh 2>xg-sh-so-4.err
+result=$?
+cat xg-sh-so-4.err
+test $result = 1 || Exit 1
+
+exit 0