[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