mbrtowc bug

Corinna Vinschen corinna-cygwin@cygwin.com
Mon Jul 20 12:15:00 GMT 2009


On Jul 20 05:15, Eric Blake wrote:
> -----BEGIN PGP SIGNED MESSAGE-----
> Hash: SHA1
> 
> The gnulib unit tests are declaring that cygwin's mbrtowc is broken.  STC:
> 
> #include <locale.h>
> #include <string.h>
> #include <wchar.h>
> int main ()
> {
>   if (setlocale (LC_ALL, "ja_JP.eucJP") != NULL)
>     {
>       char input[] = "B\217\253\344\217\251\316er";
> 
>       mbstate_t state;
>       wchar_t wc;
> 
>       memset (&state, '\0', sizeof (mbstate_t));
>       if (mbrtowc (&wc, input + 1, 1, &state) == (size_t)(-2))
>         {
>           input[1] = '\0';
>           if (mbrtowc (&wc, input + 2, 5, &state) != 2)
>             return 1;
>         }
>     }
>   return 0;
> }
> 
> 
> According to Bruno Haible[1], the bug is in the __eucjp_wctomb and
> __eucjp_mbtowc implementations.
> 
> [1] http://lists.gnu.org/archive/html/bug-gnulib/2009-07/msg00051.html

I'm a bit disappointed that, when looking into the sources anyway, why
nobody provides a patch, rather then let me go through the whole test
again.  Sigh.

Here's another problem:  Bruno is wrong.  Cygwin has it's own implementation
of __eucjp_wctomb and __eucjp_mbtowc in winsup/cygwin/strfunc.cc, using
the underlying Windows functions WideCharToMultiByte/MultiByteToWideChar.
The newlib functions don't need to be rewritten.

Thanks all the same for the testcase.


Corinna

-- 
Corinna Vinschen                  Please, send mails regarding Cygwin to
Cygwin Project Co-Leader          cygwin AT cygwin DOT com
Red Hat

--
Problem reports:       http://cygwin.com/problems.html
FAQ:                   http://cygwin.com/faq/
Documentation:         http://cygwin.com/docs.html
Unsubscribe info:      http://cygwin.com/ml/#unsubscribe-simple



More information about the Cygwin mailing list