On 2012-Apr-21 06:08:02 +0000, David Schultz <d...@freebsd.org> wrote:
>Log:
>  Fix a bug introduced in r187302 that was causing fputws() to enter an
>  infinite loop pretty much unconditionally.

Unfortunately, I suspect you've just turned an unconditional infinite
loop into a conditional one.  There's still a "wsp = ws;" inside the
loop so if you pass in a long string (one that exceeds BUFSIZ bytes
when converted to a multi-byte string) then wsp will be non-NULL
after the call to __wcsnrtombs(), causing the do loop to loop and
then wsp will be re-initialised to ws.  I think the fix is to move
the "wsp = ws;" outside the loop.

>  It's remarkable that the
>  patch that introduced the bug was never tested, but even more
>  remarkable that nobody noticed for over two years.

It took me a while to work out that the problem was libc and not my code.

-- 
Peter Jeremy

Attachment: pgp74c8x5kqW0.pgp
Description: PGP signature

Reply via email to