Pointer to invalid multibyte sequence in mbsnrtowcs()

Florian Weimer fweimer@redhat.com
Mon Dec 19 14:31:00 GMT 2016


On 12/19/2016 05:52 AM, Igor Liferenko wrote:

> Contrary to mbsnrtowcs(3), *src is not left pointing to the invalid multibyte
> sequence after mbsnrtowcs() completes.
>
> There are two possible cases:
>
> 1) incomplete multibyte character is at the end of input buffer *)
> 2) incomplete multibyte character is not at the end of input buffer *)
>
> *) - end of buffer is determined by nms argument.
>
> But in either case *src is unchanged. Am I missing something obvious or it is
> a bug?
>
> Consider the following examples:
>
> Example 1 (at the end of buffer):
>
>     #include <locale.h>
>     #include <wchar.h>
>     #include <stdio.h>
>     #include <string.h>
>     int main(void)
>     {
>       setlocale(LC_CTYPE, "en_US.UTF-8");
>       char *s = "\321\216\321";

I'm not sure if this example demonstrates the behavior you describe 
because the string starts with an invalid multibyte sequence, so I would 
expect mbsnrtowcs not t advance the read pointer in this case.

Thanks,
Florian



More information about the Libc-help mailing list