From: Bruno Haible Date: Sun, 12 Mar 2023 14:25:33 +0000 (+0100) Subject: xgettext: In language JavaScript, avoid a crash for some non-ASCII input. X-Git-Tag: v0.22~114 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=e637ee8c9fee4e13e99c48b4fc684f0117d2a9e3;p=thirdparty%2Fgettext.git 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. --- 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 ' xg-js-8a.js +printf ' xg-js-8b.js +printf '\340' > 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