[PATCH] libio: Ensure output buffer for wchars (bug 28828)
Adhemerval Zanella
adhemerval.zanella@linaro.org
Mon Feb 14 14:15:46 GMT 2022
On 13/02/2022 16:52, jobol@nonadev.net wrote:
> When fileops.c checks for nullity of the write pointer,
> in order to ensure its allocation, before that patch,
> wfileops didn't. This was leading to crashes on some cases,
> as described by bug 28828.
>
> The minimal sequence to produce the crash was:
>
> #include <stdio.h>
> #include <wchar.h>
> int main(int ac, char **av)
> {
> setvbuf(stdout, NULL, _IOLBF, 0);
> fgetwc(stdin);
> fputwc(10, stdout); /*CRASH HERE!*/
> return 0;
> }
>
> The line "fgetwc(stdin);" is necessary. It introduces the
> bug by setting the flag _IO_CURRENTLY_PUTTING of stdout
> indirectly (file wfileops.c, function _IO_wfile_underflow, line 213).
>
> Signed-off-by: Jose Bollo <jobol@nonadev.net>
Patch looks ok, but git-pw fails to apply it:
$ git-pw patch apply 51088
Applying: libio: Ensure output buffer for wchars (bug 28828)
error: patch failed: libio/wfileops.c:412
error: libio/wfileops.c: patch does not apply
error: Did you hand edit your patch?
Could you resend it?
Also, could you also provide a regression testcase for this fix?
> ---
> libio/wfileops.c | 5 +++--
> 1 file changed, 3 insertions(+), 2 deletions(-)
>
> diff --git a/libio/wfileops.c b/libio/wfileops.c
> index fb9d45b677..aa94a22983 100644
> --- a/libio/wfileops.c
> +++ b/libio/wfileops.c
> @@ -412,10 +412,11 @@ _IO_wfile_overflow (FILE *f, wint_t wch)
> return WEOF;
> }
> /* If currently reading or no buffer allocated. */
> - if ((f->_flags & _IO_CURRENTLY_PUTTING) == 0)
> + if ((f->_flags & _IO_CURRENTLY_PUTTING) == 0
> + || f->_wide_data->_IO_write_base == NULL)
> {
> /* Allocate a buffer if needed. */
> - if (f->_wide_data->_IO_write_base == 0)
> + if (f->_wide_data->_IO_write_base == NULL)
> {
> _IO_wdoallocbuf (f);
> _IO_free_wbackup_area (f);
More information about the Libc-alpha
mailing list