This is the mail archive of the libc-alpha@sourceware.org mailing list for the glibc project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: [patch] Fix BZ 19165 -- overflow in fread / fwrite


On 26 Oct 2015 19:04, Paul Pluzhnikov wrote:
> --- a/libio/libioP.h
> +++ b/libio/libioP.h
> +
> +/* Returns a*b if the result doesn't overflow, else SIZE_MAX.  */
> +static inline size_t
> +__attribute__ ((__always_inline__))

__always_inline

> +_IO_saturating_umull (size_t a, size_t b)
> +{
> +#if __GNUC_PREREQ(5, 0)

needs space before the (

> +  size_t result;
> +
> +  if (__builtin_umull_overflow (a, b, &result)) {
> +    return SIZE_MAX;
> +  }

braces are wrong -- just delete them

> +  return result;

seems like it'd be better:
  return __builtin_umull_overflow (a, b, &result) ? SIZE_MAX : result;

> +#else
> +  const size_t mul_no_overflow = (size_t) 1 << 4 * sizeof (size_t);
> +  if ((a >= mul_no_overflow || b >= mul_no_overflow)
> +      && b > 1 && a > SIZE_MAX / b)

should we add a __umull_overflow define to misc/sys/cdefs.h ?
then we don't have to duplicate this logic everywhere.
-mike

Attachment: signature.asc
Description: Digital signature


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]