Follow @Openwall on Twitter for new release announcements and other news
[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Date: Sun, 1 Nov 2020 21:40:02 +0100
From: Szabolcs Nagy <nsz@...t70.net>
To: Érico Nogueira <ericonr@...root.org>
Cc: musl@...ts.openwall.com, Alexander Vitiuk <suda@....net>
Subject: Re: swprintf possible bug

* Érico Nogueira <ericonr@...root.org> [2020-11-01 17:17:49 -0300]:
> On Sun Nov 1, 2020 at 6:06 PM -03, Alexander Vitiuk wrote:
> > It seems, wsprintf() / wprintf() are not working in musl as expected, if
> > uses with cyrillic:
> >
> > C testcase:
> > #include <wchar.h>
> > int main() {
> > wprintf(L"[hello]\n");
> > wprintf(L"[Привет]\n");
> > return 0;
> > }
> > on x86_64-linux-gnu prints:
> > [hello]
> > [Privet]
> > and on x86_64-linux-musl prints: [hello]
> > [
> >
> > There are other cases described:
> > https://github.com/emscripten-core/emscripten/issues/11947
> 
> For what it's worth, if this is a bug, it would seem to be in how musl
> decides when to print characters (not the formatting functions
> themselves), since the below program doesn't print anything:
> 
> #include <wchar.h>
> #include <stdio.h>
> 
> int main() {
>   fputws(L"[Привет Василий]\n", stdout);
>   // I don't know if I'm accessing a wchar_t appropriately here
>   fputwc(L"[Привет Василий]\n"[3], stdout);
>   return 0;
> }
> 
> I tried tracing the execution from fputws, and not printing anything
> seems to be caused by the return value of wcsrtombs().

these functions return an error code..

in this case they must return -1 and set errno to EILSEQ,
since the selected multibyte encoding (LC_CTYPE=C) cannot
represent the printed wide characters.

i think the musl behaviour is correct, you can try adding
setlocale(LC_CTYPE,"") at the start of main to make it work.

Powered by blists - more mailing lists

Confused about mailing lists and their use? Read about mailing lists on Wikipedia and check out these guidelines on proper formatting of your messages.