summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBruno Haible <bruno@clisp.org>2023-03-12 15:25:33 +0100
committerBruno Haible <bruno@clisp.org>2023-03-14 02:57:28 +0100
commite637ee8c9fee4e13e99c48b4fc684f0117d2a9e3 (patch)
treed9d1ec908a6a07c232b7adc661d449ad4f5bb28d
parent7886dcc16749f40243243a27e1a1e94d176e793d (diff)
downloadgettext-e637ee8c9fee4e13e99c48b4fc684f0117d2a9e3.tar.gz
xgettext: In language JavaScript, avoid a crash for some non-ASCII input.
* gettext-tools/src/xg-encoding.c (non_ascii_error_message, non_utf8_error_message): Handle all possible lexical_context_ty values. * gettext-tools/tests/xgettext-javascript-8: New file. * gettext-tools/tests/Makefile.am (TESTS): Add it.
-rw-r--r--gettext-tools/src/xg-encoding.c12
-rw-r--r--gettext-tools/tests/Makefile.am2
-rwxr-xr-xgettext-tools/tests/xgettext-javascript-831
3 files changed, 44 insertions, 1 deletions
diff --git a/gettext-tools/src/xg-encoding.c b/gettext-tools/src/xg-encoding.c
index d06587c85..b36fe148f 100644
--- a/gettext-tools/src/xg-encoding.c
+++ b/gettext-tools/src/xg-encoding.c
@@ -73,6 +73,7 @@ non_ascii_error_message (lexical_context_ty lcontext,
switch (lcontext)
{
case lc_outside:
+ case lc_xml_content:
errmsg =
xasprintf (_("Non-ASCII character at %s%s."), file_name, buffer);
break;
@@ -85,6 +86,11 @@ non_ascii_error_message (lexical_context_ty lcontext,
errmsg =
xasprintf (_("Non-ASCII string at %s%s."), file_name, buffer);
break;
+ case lc_xml_open_tag:
+ case lc_xml_close_tag:
+ errmsg =
+ xasprintf (_("Non-ASCII XML tag at %s%s."), file_name, buffer);
+ break;
default:
abort ();
}
@@ -107,6 +113,7 @@ non_utf8_error_message (lexical_context_ty lcontext,
switch (lcontext)
{
case lc_outside:
+ case lc_xml_content:
errmsg =
xasprintf (_("Character at %s%s is not UTF-8 encoded."),
file_name, buffer);
@@ -121,6 +128,11 @@ non_utf8_error_message (lexical_context_ty lcontext,
xasprintf (_("String at %s%s is not UTF-8 encoded."),
file_name, buffer);
break;
+ case lc_xml_open_tag:
+ case lc_xml_close_tag:
+ errmsg =
+ xasprintf (_("XML tag at %s%s is not UTF-8 encoded."), file_name, buffer);
+ break;
default:
abort ();
}
diff --git a/gettext-tools/tests/Makefile.am b/gettext-tools/tests/Makefile.am
index b4bb3eba3..83e5ef17b 100644
--- a/gettext-tools/tests/Makefile.am
+++ b/gettext-tools/tests/Makefile.am
@@ -113,7 +113,7 @@ TESTS = gettext-1 gettext-2 \
xgettext-java-stackovfl-3 xgettext-java-stackovfl-4 \
xgettext-javascript-1 xgettext-javascript-2 xgettext-javascript-3 \
xgettext-javascript-4 xgettext-javascript-5 xgettext-javascript-6 \
- xgettext-javascript-7 \
+ xgettext-javascript-7 xgettext-javascript-8 \
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-8 b/gettext-tools/tests/xgettext-javascript-8
new file mode 100755
index 000000000..d6a530ec7
--- /dev/null
+++ b/gettext-tools/tests/xgettext-javascript-8
@@ -0,0 +1,31 @@
+#! /bin/sh
+. "${srcdir=.}/init.sh"; path_prepend_ . ../src
+
+# Test JavaScript support: non-ASCII characters in XML tags or content.
+
+printf '<a\340' > xg-js-8a.js
+printf '<a></a\340' > xg-js-8b.js
+printf '<a>\340</a>' > xg-js-8c.js
+
+: ${XGETTEXT=xgettext}
+LANGUAGE= LC_ALL=C ${XGETTEXT} --no-location -d xg-js-8.tmp xg-js-8a.js 2>xg-js-8.err
+result=$?
+cat xg-js-8.err
+test $result = 1 || Exit 1
+grep 'Non-ASCII' xg-js-8.err >/dev/null || Exit 1
+
+: ${XGETTEXT=xgettext}
+LANGUAGE= LC_ALL=C ${XGETTEXT} --no-location -d xg-js-8.tmp xg-js-8b.js 2>xg-js-8.err
+result=$?
+cat xg-js-8.err
+test $result = 1 || Exit 1
+grep 'Non-ASCII' xg-js-8.err >/dev/null || Exit 1
+
+: ${XGETTEXT=xgettext}
+LANGUAGE= LC_ALL=C ${XGETTEXT} --no-location -d xg-js-8.tmp xg-js-8c.js 2>xg-js-8.err
+result=$?
+cat xg-js-8.err
+test $result = 1 || Exit 1
+grep 'Non-ASCII' xg-js-8.err >/dev/null || Exit 1
+
+exit 0