]> git.ipfire.org Git - thirdparty/gettext.git/commitdiff
xgettext: In language JavaScript, avoid a crash for some non-ASCII input.
authorBruno Haible <bruno@clisp.org>
Sun, 12 Mar 2023 14:25:33 +0000 (15:25 +0100)
committerBruno Haible <bruno@clisp.org>
Tue, 14 Mar 2023 01:57:28 +0000 (02:57 +0100)
* 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.

gettext-tools/src/xg-encoding.c
gettext-tools/tests/Makefile.am
gettext-tools/tests/xgettext-javascript-8 [new file with mode: 0755]

index d06587c8520357671276d196aa111056c940fe2a..b36fe148f60139bbf0477e03b1ba4a00dd98205a 100644 (file)
@@ -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 ();
     }
index b4bb3eba35f48dfa358bb9a2e798798f07ebe880..83e5ef17b81e134661a4adcf1825b0f9b60a8a09 100644 (file)
@@ -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 (executable)
index 0000000..d6a530e
--- /dev/null
@@ -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