fprintf() crashes on wide-oriented stream.
Corinna Vinschen
vinschen@redhat.com
Thu Nov 2 18:53:51 GMT 2023
Hey guys,
On Oct 4 16:16, Jeff Johnston wrote:
> Hi Takashi,
>
> I finally took a look at this. The issue is whether POSIX compliance is
> desired. Corinna would have
> strong opinions that it is desired and thus, I think she should have her
> say when she gets back. I personally believe that
> newlib should have behaved like glibc.
I took a look into the POSIX docs. POSIX aligns with ISO/IEC 9899:1999.
The description is slightly vague, in that it only has to say this:
"Byte input/output functions cannot be applied to a wide-oriented
stream, and wide-character input/output functions cannot be applied to
a byte-oriented stream."
It does not explicitely outline what "cannot be applied" means in this
context.
IIUC, this *could* mean that in case of the testcase a crash is as much
standards-compliant as the GLibC behaviour. Not that a crash is desired,
of course...
In how far the BSD behaviour is covered by this description, I really
can't tell.
I wonder if the Austin group could clarify, or if a clarification
already exists and I just missed it. CC Eric, in case he wants to
follow up on this.
Either way, I think that the safe way forward is actually to behave
as GLibC does.
> I also think the test snippet is
> invalid and should have performed an fwide call on stdout
> to reset the wide-orientation and have the code work properly in all cases.
In terms of ISO/IEC 9899:1999 I agree. However, it also shows the
flaw that newlib crashes with a buffer overflow, which we should
avoid if possible.
Does that make sense?
Thanks,
Corinna
More information about the Newlib
mailing list