diff options
author | Bruno Haible <bruno@clisp.org> | 2023-03-14 03:19:59 +0100 |
---|---|---|
committer | Bruno Haible <bruno@clisp.org> | 2023-03-14 03:19:59 +0100 |
commit | f1b2a62f9b48019d60ddd1693a9bc6e5529772fa (patch) | |
tree | 21bcc5ac7a022728007e6c9aa1293609108defed | |
parent | bb57c7637a04ce5f980c71cb42b1b5ef089a3a0f (diff) | |
download | gettext-f1b2a62f9b48019d60ddd1693a9bc6e5529772fa.tar.gz |
xgettext: In language Shell, avoid a crash.
* gettext-tools/src/x-sh.c (phase1_pushback): Increase size by 1.
* gettext-tools/tests/xgettext-sh-8: New file.
* gettext-tools/tests/Makefile.am (TESTS): Add it.
-rw-r--r-- | gettext-tools/src/x-sh.c | 2 | ||||
-rw-r--r-- | gettext-tools/tests/Makefile.am | 2 | ||||
-rwxr-xr-x | gettext-tools/tests/xgettext-sh-8 | 23 |
3 files changed, 25 insertions, 2 deletions
diff --git a/gettext-tools/src/x-sh.c b/gettext-tools/src/x-sh.c index 6c610d0c8..d611d6dfa 100644 --- a/gettext-tools/src/x-sh.c +++ b/gettext-tools/src/x-sh.c @@ -182,7 +182,7 @@ do_ungetc (int c) /* Remove backslash followed by newline from the input stream. */ -static int phase1_pushback[1]; +static int phase1_pushback[2]; static int phase1_pushback_length; static int diff --git a/gettext-tools/tests/Makefile.am b/gettext-tools/tests/Makefile.am index 0da888ab1..10d9756b3 100644 --- a/gettext-tools/tests/Makefile.am +++ b/gettext-tools/tests/Makefile.am @@ -149,7 +149,7 @@ TESTS = gettext-1 gettext-2 \ xgettext-scheme-4 xgettext-scheme-5 xgettext-scheme-6 \ xgettext-scheme-stackovfl-1 xgettext-scheme-stackovfl-2 \ xgettext-sh-1 xgettext-sh-2 xgettext-sh-3 xgettext-sh-4 xgettext-sh-5 \ - xgettext-sh-6 xgettext-sh-7 \ + xgettext-sh-6 xgettext-sh-7 xgettext-sh-8 \ xgettext-sh-stackovfl-1 xgettext-sh-stackovfl-2 \ xgettext-sh-stackovfl-3 xgettext-sh-stackovfl-4 \ xgettext-sh-stackovfl-5 \ diff --git a/gettext-tools/tests/xgettext-sh-8 b/gettext-tools/tests/xgettext-sh-8 new file mode 100755 index 000000000..2aedf9f3b --- /dev/null +++ b/gettext-tools/tests/xgettext-sh-8 @@ -0,0 +1,23 @@ +#!/bin/sh +. "${srcdir=.}/init.sh"; path_prepend_ . ../src + +# Test of Shell support: maximum needed for phase1_pushback. + +cat <<\EOF > xg-sh-8.sh +echo `gettext $'\'\x'` +EOF + +: ${XGETTEXT=xgettext} +${XGETTEXT} --omit-header --no-location -d xg-sh-8.tmp xg-sh-8.sh || Exit 1 +LC_ALL=C tr -d '\r' < xg-sh-8.tmp.po > xg-sh-8.po || Exit 1 + +cat <<\EOF > xg-sh-8.ok +msgid "'\\x" +msgstr "" +EOF + +: ${DIFF=diff} +${DIFF} xg-sh-8.ok xg-sh-8.po +result=$? + +exit $result |