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