[PATCH] libio: Add terminating NUL when the first character is EOF in getdelim [BZ #28038]

Florian Weimer fweimer@redhat.com
Thu Oct 9 07:39:38 GMT 2025


* Collin Funk:

> POSIX requires that the buffer used by getdelim/getline add a
> terminating NUL whenever an EOF is read.
>
> * libio/iogetdelim.c (__getdelim): Add a NUL byte when the first
> __underflow is called.
> * libio/tst-getdelim.c (do_test): Add a test case for the bug.
>
> -- 8< --
>
> If this patch is okay for glibc, then I will push it to Gnulib as well
> since the function is mostly copied over there.
>
> ---
>  libio/iogetdelim.c   |  1 +
>  libio/tst-getdelim.c | 17 +++++++++++++++++
>  2 files changed, 18 insertions(+)
>
> diff --git a/libio/iogetdelim.c b/libio/iogetdelim.c
> index 0bfaef227a..1d89757352 100644
> --- a/libio/iogetdelim.c
> +++ b/libio/iogetdelim.c
> @@ -77,6 +77,7 @@ __getdelim (char **lineptr, size_t *n, int delimiter, FILE *fp)
>        if (__underflow (fp) == EOF)
>  	{
>  	  result = -1;
> +	  (*lineptr)[0] = '\0';
>  	  goto unlock_return;
>  	}
>        len = fp->_IO_read_end - fp->_IO_read_ptr;

Looks okay.  The buffer is already allocated at this point.  I don't
think there is backwards compatibility impact.

Reviewed-by: Florian Weimer <fweimer@redhat.com>

Thanks,
Florian



More information about the Libc-alpha mailing list