Print this page
XXXX all calloc() implementations should check overflow

*** 329,339 **** void * calloc(size_t nelem, size_t bytes) { void * ptr; ! size_t size = nelem * bytes; ptr = malloc(size); if (ptr == NULL) return (NULL); (void) memset(ptr, 0, size); --- 329,351 ---- void * calloc(size_t nelem, size_t bytes) { void * ptr; ! size_t size; ! ! if (nelem == 0 || bytes == 0) { ! size = 0; ! } else { ! size = nelem * bytes; ! ! /* check for overflow */ ! if (size / nelem != bytes) { ! errno = ENOMEM; ! return (NULL); ! } ! } ptr = malloc(size); if (ptr == NULL) return (NULL); (void) memset(ptr, 0, size);