summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBruno Haible <bruno@clisp.org>2023-03-14 03:19:59 +0100
committerBruno Haible <bruno@clisp.org>2023-03-14 03:19:59 +0100
commitf1b2a62f9b48019d60ddd1693a9bc6e5529772fa (patch)
tree21bcc5ac7a022728007e6c9aa1293609108defed
parentbb57c7637a04ce5f980c71cb42b1b5ef089a3a0f (diff)
downloadgettext-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.c2
-rw-r--r--gettext-tools/tests/Makefile.am2
-rwxr-xr-xgettext-tools/tests/xgettext-sh-823
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