2002-08-03  Jakub Jelinek  <jakub@redhat.com>
	    Ulrich Drepper  <drepper@redhat.com>

	* malloc/malloc.c (public_cALLOc): Only divide if at least one of
	arguments is big enough to cause an overflow.
This commit is contained in:
Ulrich Drepper 2002-08-03 18:59:41 +00:00
parent 7abb683a13
commit d9af917d07
2 changed files with 16 additions and 3 deletions

View File

@ -1,3 +1,9 @@
2002-08-03 Jakub Jelinek <jakub@redhat.com>
Ulrich Drepper <drepper@redhat.com>
* malloc/malloc.c (public_cALLOc): Only divide if at least one of
arguments is big enough to cause an overflow.
2002-08-03 Ulrich Drepper <drepper@redhat.com>
* assert/assert.c: Use hidden_def not INTDEF.

View File

@ -488,6 +488,9 @@ Void_t *(*__morecore)(ptrdiff_t) = __default_morecore;
#endif /* _LIBC */
#endif /* USE_DL_PREFIX */
#ifndef _LIBC
#define __builtin_expect(expr, val) (expr)
#endif
/*
HAVE_MEMCPY should be defined if you are not otherwise using
@ -3466,9 +3469,13 @@ public_cALLOc(size_t n, size_t elem_size)
/* size_t is unsigned so the behavior on overflow is defined. */
bytes = n * elem_size;
if (bytes / elem_size != n) {
MALLOC_FAILURE_ACTION;
return 0;
#define HALF_INTERNAL_SIZE_T \
(((INTERNAL_SIZE_T) 1) << (8 * sizeof (INTERNAL_SIZE_T) / 2))
if (__builtin_expect ((n | elem_size) >= HALF_INTERNAL_SIZE_T, 0)) {
if (bytes / elem_size != n) {
MALLOC_FAILURE_ACTION;
return 0;
}
}
if (hook != NULL) {