diff options
author | Bruno Haible <bruno@clisp.org> | 2023-03-08 19:36:35 +0100 |
---|---|---|
committer | Bruno Haible <bruno@clisp.org> | 2023-03-09 11:40:25 +0100 |
commit | bcd08ef4de638f94b511d8365cc178e7180188a9 (patch) | |
tree | f10baf2fcfe3b62567b4655531337f2bc18e9aec /gettext-tools/tests/xgettext-sh-stackovfl-4 | |
parent | 793f539ef3201392ae5e7649f369f97285fbbfe4 (diff) | |
download | gettext-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-x | gettext-tools/tests/xgettext-sh-stackovfl-4 | 78 |
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 |