[PATCH] stdio: Check the first character is a digit before calling read_int

Florian Weimer fweimer@redhat.com
Thu Aug 7 11:48:36 GMT 2025


* > The read_int function does not check if the first character is a digit.
> Therefore, it is necessary to perform this check before calling read_int.
>
> Signed-off-by: panzhe0328 <panzhe@kylinos.cn>
> ---
>  stdio-common/vfprintf-internal.c | 7 +++++++
>  1 file changed, 7 insertions(+)
>
> diff --git a/stdio-common/vfprintf-internal.c b/stdio-common/vfprintf-internal.c
> index fa41e1b242..62e478a058 100644
> --- a/stdio-common/vfprintf-internal.c
> +++ b/stdio-common/vfprintf-internal.c
> @@ -794,6 +794,13 @@ Xprintf_buffer (struct Xprintf_buffer *buf, const CHAR_T *format,
>  
>        /* Given width in format string.  */
>      LABEL (width):
> +      if (!ISDIGIT (*f))
> +        {
> +          __set_errno (EINVAL);
> +	  Xprintf_buffer_mark_failed (buf);
> +          goto all_done;
> +        }
> +
>        width = read_int (&f);
>  
>        if (__glibc_unlikely (width == -1))

Could you provide a test case that demonstrates this problem?  Is there
precedent for the EINVAL return value?

Thanks,
Florian



More information about the Libc-alpha mailing list