diff options
author | Bruno Haible <bruno@clisp.org> | 2023-03-12 15:25:33 +0100 |
---|---|---|
committer | Bruno Haible <bruno@clisp.org> | 2023-03-14 02:57:28 +0100 |
commit | e637ee8c9fee4e13e99c48b4fc684f0117d2a9e3 (patch) | |
tree | d9d1ec908a6a07c232b7adc661d449ad4f5bb28d | |
parent | 7886dcc16749f40243243a27e1a1e94d176e793d (diff) | |
download | gettext-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.c | 12 | ||||
-rw-r--r-- | gettext-tools/tests/Makefile.am | 2 | ||||
-rwxr-xr-x | gettext-tools/tests/xgettext-javascript-8 | 31 |
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 |