[patch] Fix BZ 19165 -- overflow in fread / fwrite
Florian Weimer
fweimer@redhat.com
Mon Oct 26 07:59:00 GMT 2015
On 10/26/2015 04:49 AM, Paul Pluzhnikov wrote:
> diff --git a/libio/iofread.c b/libio/iofread.c
> index eb69b05..a8ea391 100644
> --- a/libio/iofread.c
> +++ b/libio/iofread.c
> @@ -37,7 +37,7 @@ _IO_fread (void *buf, _IO_size_t size, _IO_size_t count, _IO_FILE *fp)
> _IO_acquire_lock (fp);
> bytes_read = _IO_sgetn (fp, (char *) buf, bytes_requested);
> _IO_release_lock (fp);
> - return bytes_requested == bytes_read ? count : bytes_read / size;
> + return bytes_read / size;
> }
> libc_hidden_def (_IO_fread)
I think this needs a comment why it is acceptable not to check for
overflow here.
> + if (count > SIZE_MAX / size)
> + {
> + __set_errno(EOVERFLOW);
> + return 0;
> + }
Can you avoid the division? Maybe it makes sense to add a separate
abstraction for this (a saturated multiplication function). It could
use the built-in function with GCC 5.
Florian
More information about the Libc-alpha
mailing list