+2002-06-14 Bruno Haible <bruno@clisp.org>
+
+ * po-lex.c (mbfile_getc): Handle the case where iconv converts
+ some character and returns -1 at once; this can happen immediately
+ after an invalid multibyte sequence.
+ Reported by Andrew V. Samoilov <kai@cmail.ru>.
+
2002-06-07 Bruno Haible <bruno@clisp.org>
* user-email.in: Look at /etc/mailname, found on Debian systems.
char *outptr = &scratchbuf[0];
size_t outsize = sizeof (scratchbuf);
- if (iconv (po_lex_iconv,
- (ICONV_CONST char **) &inptr, &insize,
- &outptr, &outsize)
- == (size_t)(-1))
+ size_t res = iconv (po_lex_iconv,
+ (ICONV_CONST char **) &inptr, &insize,
+ &outptr, &outsize);
+ /* We expect that a character has been produced if and only if
+ some input bytes have been consumed. */
+ if ((insize < mbf->bufcount) != (outsize < sizeof (scratchbuf)))
+ abort ();
+ if (outsize == sizeof (scratchbuf))
{
- /* We expect that no character has been produced. */
- if (insize < mbf->bufcount)
- abort ();
- if (outsize < sizeof (scratchbuf))
+ /* No character has been produced. Must be an error. */
+ if (res != (size_t)(-1))
abort ();
if (errno == EILSEQ)
+2002-06-14 Bruno Haible <bruno@clisp.org>
+
+ * msgfmt-11: New file.
+ * Makefile.am (TESTS): Add it.
+
2002-05-19 Bruno Haible <bruno@clisp.org>
* rpath.README: Renamed from rpath-2.README.
msgexec-1 msgexec-2 \
msgfilter-1 msgfilter-2 \
msgfmt-1 msgfmt-2 msgfmt-3 msgfmt-4 msgfmt-5 msgfmt-6 msgfmt-7 \
- msgfmt-8 msgfmt-9 msgfmt-10 \
+ msgfmt-8 msgfmt-9 msgfmt-10 msgfmt-11 \
msggrep-1 msggrep-2 msggrep-3 msggrep-4 msggrep-5 \
msgmerge-1 msgmerge-2 msgmerge-3 msgmerge-4 msgmerge-5 msgmerge-6 \
msgmerge-7 msgmerge-8 msgmerge-9 msgmerge-10 msgmerge-11 msgmerge-12 \
--- /dev/null
+#! /bin/sh
+
+# Test handling of invalid multibyte sequences.
+
+tmpfiles=""
+trap 'rm -fr $tmpfiles' 1 2 3 15
+
+tmpfiles="$tmpfiles mf-11.po"
+cat <<\EOF > mf-11.po
+msgid ""
+msgstr ""
+"Project-Id-Version: control-center 1.0.6\n"
+"POT-Creation-Date: 2002-06-02 17:13-0700\n"
+"PO-Revision-Date: 2002-05-29 20:11+0200\n"
+"Last-Translator: Yuriy Syrota <yuri@renome.rovno.ua>\n"
+"Language-Team: Ukrainian <uk@li.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=utf-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+msgid "_Enable keyboard accessibility"
+msgstr "_õצÍËÎÕÔÉ ÓÐÅæÁÌØÎ¦ ÍÏÖÌÉ×ÏÓÔ¦ ËÌÁצÁÔÕÒÉ"
+EOF
+
+tmpfiles="$tmpfiles mf-11.mo core *.core"
+: ${MSGFMT=msgfmt}
+${MSGFMT} --check -o mf-11.mo mf-11.po 2>/dev/null
+# Exit code must be 1.
+# If the division by zero didn't get noticed, it would be 0.
+# If it produced a core dump, it would be 134 (= 128 + SIGABRT).
+test $? = 1
+result=$?
+
+rm -fr $tmpfiles
+
+exit $result