mirror of
https://sourceware.org/git/glibc.git
synced 2024-11-14 01:00:07 +00:00
parent
ab8b49432b
commit
ea00a80db7
@ -1,3 +1,7 @@
|
|||||||
|
2018-01-04 Florian Weimer <fweimer@redhat.com>
|
||||||
|
|
||||||
|
* malloc/malloc-internal.h (check_mul_overflow_size_t): New.
|
||||||
|
|
||||||
2018-01-04 Florian Weimer <fweimer@redhat.com>
|
2018-01-04 Florian Weimer <fweimer@redhat.com>
|
||||||
|
|
||||||
* include/libc-pointer-arith.h: New file.
|
* include/libc-pointer-arith.h: New file.
|
||||||
|
@ -81,5 +81,24 @@ void __malloc_fork_unlock_parent (void) internal_function attribute_hidden;
|
|||||||
/* Called in the child process after a fork. */
|
/* Called in the child process after a fork. */
|
||||||
void __malloc_fork_unlock_child (void) internal_function attribute_hidden;
|
void __malloc_fork_unlock_child (void) internal_function attribute_hidden;
|
||||||
|
|
||||||
|
/* Set *RESULT to LEFT * RIGHT. Return true if the multiplication
|
||||||
|
overflowed. */
|
||||||
|
static inline bool
|
||||||
|
check_mul_overflow_size_t (size_t left, size_t right, size_t *result)
|
||||||
|
{
|
||||||
|
#if __GNUC__ >= 5
|
||||||
|
return __builtin_mul_overflow (left, right, result);
|
||||||
|
#else
|
||||||
|
/* size_t is unsigned so the behavior on overflow is defined. */
|
||||||
|
*result = left * right;
|
||||||
|
size_t half_size_t = ((size_t) 1) << (8 * sizeof (size_t) / 2);
|
||||||
|
if (__glibc_unlikely ((left | right) >= half_size_t))
|
||||||
|
{
|
||||||
|
if (__glibc_unlikely (right != 0 && *result / right != left))
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
#endif /* _MALLOC_INTERNAL_H */
|
#endif /* _MALLOC_INTERNAL_H */
|
||||||
|
Loading…
Reference in New Issue
Block a user