When using Fn malloc be careful to avoid the following idiom:
if ((p = malloc(num * size)) == NULL) err(1, "malloc");
The multiplication may lead to an integer overflow, which can be avoided using the extension Fn reallocarray , as follows:
if ((p = reallocarray(NULL, num, size)) == NULL) err(1, "malloc");
Alternatively Fn calloc is a more portable solution which comes with the cost of clearing memory.
If Fn malloc must be used, be sure to test for overflow:
if (size && num > SIZE_MAX / size) { errno = ENOMEM; err(1, "overflow"); }
The use of Fn reallocarray or Fn calloc is strongly encouraged when allocating multiple sized objects in order to avoid possible integer overflows.