Bug 554790 - g_convert() misbehaves with winiconv versions
authorTor Lillqvist <tml@novell.com>
Wed, 8 Oct 2008 20:35:39 +0000 (20:35 +0000)
committerTor Lillqvist <tml@src.gnome.org>
Wed, 8 Oct 2008 20:35:39 +0000 (20:35 +0000)
2008-10-08  Tor Lillqvist  <tml@novell.com>

Bug 554790 - g_convert() misbehaves with winiconv versions

* glib/win_iconv.c (kernel_mbtowc): If converting from ASCII,
explicitly check for and reject 8bit chars. MultiByteToWideChar()
doesn't, at least not on XP.

svn path=/trunk/; revision=7578

ChangeLog
glib/win_iconv.c

index 2ae8d23..9bf3daf 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,11 @@
+2008-10-08  Tor Lillqvist  <tml@novell.com>
+
+       Bug 554790 - g_convert() misbehaves with winiconv versions
+
+       * glib/win_iconv.c (kernel_mbtowc): If converting from ASCII,
+       explicitly check for and reject 8bit chars. MultiByteToWideChar()
+       doesn't, at least not on XP.
+
 2008-10-06  Matthias Clasen  <mclasen@redhat.com>
 
        * glib/gtypes.h: Properly include gmacros.h
index b8ee710..ea19240 100644 (file)
@@ -1362,6 +1362,12 @@ kernel_mbtowc(csconv_t *cv, const uchar *buf, int bufsize, ushort *wbuf, int *wb
     len = cv->mblen(cv, buf, bufsize);\r
     if (len == -1)\r
         return -1;\r
+    /* If converting from ASCII, reject 8bit\r
+     * chars. MultiByteToWideChar() doesn't. Note that for ASCII we\r
+     * know that the mblen function is sbcs_mblen() so len is 1.\r
+     */\r
+    if (cv->codepage == 20127 && buf[0] >= 0x80)\r
+        return_error(EILSEQ);\r
     *wbufsize = MultiByteToWideChar(cv->codepage, mbtowc_flags (cv->codepage),\r
             (const char *)buf, len, (wchar_t *)wbuf, *wbufsize);\r
     if (*wbufsize == 0)\r