summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBruno Haible <bruno@clisp.org>2023-03-13 00:21:50 +0100
committerBruno Haible <bruno@clisp.org>2023-03-14 02:57:28 +0100
commitff78c835ad8aa8a7f00d237eaa4b3f369edcbe1d (patch)
treed3a55bf75339f3b4fb9c488e3e0c19707b83634a
parent0baf23d1db7379e980455350fe867d0860871bf4 (diff)
downloadgettext-ff78c835ad8aa8a7f00d237eaa4b3f369edcbe1d.tar.gz
xgettext: In language JavaScript, avoid a crash.
This avoids a crash "Assertion `phase2_pushback_length + j < SIZEOF (phase2_pushback)' failed.". * gettext-tools/src/x-javascript.c (phase2_pushback): Increase size by 1. * gettext-tools/tests/xgettext-javascript-12: New file. * gettext-tools/tests/Makefile.am (TESTS): Add it.
-rw-r--r--gettext-tools/src/x-javascript.c4
-rw-r--r--gettext-tools/tests/Makefile.am2
-rwxr-xr-xgettext-tools/tests/xgettext-javascript-1221
3 files changed, 24 insertions, 3 deletions
diff --git a/gettext-tools/src/x-javascript.c b/gettext-tools/src/x-javascript.c
index 98710394d..815620861 100644
--- a/gettext-tools/src/x-javascript.c
+++ b/gettext-tools/src/x-javascript.c
@@ -215,8 +215,8 @@ phase1_ungetc (int c)
static lexical_context_ty lexical_context;
-/* Maximum used, length of "<![CDATA[" tag minus one. */
-static int phase2_pushback[8];
+/* Maximum used, length of "<![CDATA[" tag. */
+static int phase2_pushback[9];
static int phase2_pushback_length;
/* Read the next Unicode UCS-4 character from the input file. */
diff --git a/gettext-tools/tests/Makefile.am b/gettext-tools/tests/Makefile.am
index 6ca580bd7..fcb60d81d 100644
--- a/gettext-tools/tests/Makefile.am
+++ b/gettext-tools/tests/Makefile.am
@@ -114,7 +114,7 @@ TESTS = gettext-1 gettext-2 \
xgettext-javascript-1 xgettext-javascript-2 xgettext-javascript-3 \
xgettext-javascript-4 xgettext-javascript-5 xgettext-javascript-6 \
xgettext-javascript-7 xgettext-javascript-8 xgettext-javascript-9 \
- xgettext-javascript-10 xgettext-javascript-11 \
+ xgettext-javascript-10 xgettext-javascript-11 xgettext-javascript-12 \
xgettext-javascript-stackovfl-1 xgettext-javascript-stackovfl-2 \
xgettext-javascript-stackovfl-3 xgettext-javascript-stackovfl-4 \
xgettext-javascript-stackovfl-5 xgettext-javascript-stackovfl-6 \
diff --git a/gettext-tools/tests/xgettext-javascript-12 b/gettext-tools/tests/xgettext-javascript-12
new file mode 100755
index 000000000..5f71647f4
--- /dev/null
+++ b/gettext-tools/tests/xgettext-javascript-12
@@ -0,0 +1,21 @@
+#! /bin/sh
+. "${srcdir=.}/init.sh"; path_prepend_ . ../src
+
+# Test JavaScript support: maximum needed for phase2_pushback.
+
+printf '<![CDATA0' > xg-js-12a.js
+printf '<![CDATA012345' > xg-js-12b.js
+
+: ${XGETTEXT=xgettext}
+LANGUAGE= LC_ALL=C ${XGETTEXT} --no-location -d xg-js-12.tmp xg-js-12a.js 2>xg-js-12.err
+result=$?
+cat xg-js-12.err
+test $result = 0 || Exit 1
+
+: ${XGETTEXT=xgettext}
+LANGUAGE= LC_ALL=C ${XGETTEXT} --no-location -d xg-js-12.tmp xg-js-12b.js 2>xg-js-12.err
+result=$?
+cat xg-js-12.err
+test $result = 0 || Exit 1
+
+exit 0