Index: libcfa/src/heap.cfa
===================================================================
--- libcfa/src/heap.cfa	(revision a094f1363909fc78b5d3714d5cf9fd88648b448d)
+++ libcfa/src/heap.cfa	(revision 1aa6ecb22c586c21852eaca5651a1572ff7b12a6)
@@ -10,6 +10,6 @@
 // Created On       : Tue Dec 19 21:58:35 2017
 // Last Modified By : Peter A. Buhr
-// Last Modified On : Wed Jul 24 13:12:45 2019
-// Update Count     : 550
+// Last Modified On : Fri Oct 18 07:42:09 2019
+// Update Count     : 556
 //
 
@@ -541,4 +541,5 @@
 	// along with the block and is a multiple of the alignment size.
 
+  if ( unlikely( size > ~0ul - sizeof(HeapManager.Storage) ) ) return 0;
 	size_t tsize = size + sizeof(HeapManager.Storage);
 	if ( likely( tsize < mmapStart ) ) {				// small size => sbrk
@@ -592,4 +593,5 @@
 		block->header.kind.real.home = freeElem;		// pointer back to free list of apropriate size
 	} else {											// large size => mmap
+  if ( unlikely( size > ~0ul - pageSize ) ) return 0;
 		tsize = libCeiling( tsize, pageSize );			// must be multiple of page size
 		#ifdef __STATISTICS__
@@ -888,5 +890,4 @@
 	} // realloc
 
-
 	// The obsolete function memalign() allocates size bytes and returns a pointer to the allocated memory. The memory
 	// address will be a multiple of alignment, which must be a power of two.
@@ -992,5 +993,5 @@
 	size_t malloc_alignment( void * addr ) {
 	  if ( unlikely( addr == 0 ) ) return libAlign();	// minimum alignment
-		HeapManager.Storage.Header * header = (HeapManager.Storage.Header *)( (char *)addr - sizeof(HeapManager.Storage) );
+		HeapManager.Storage.Header * header = headerAddr( addr );
 		if ( (header->kind.fake.alignment & 1) == 1 ) {	// fake header ?
 			return header->kind.fake.alignment & -2;	// remove flag from value
@@ -1004,6 +1005,5 @@
 	bool malloc_zero_fill( void * addr ) {
 	  if ( unlikely( addr == 0 ) ) return false;		// null allocation is not zero fill
-
-		HeapManager.Storage.Header * header = (HeapManager.Storage.Header *)( (char *)addr - sizeof(HeapManager.Storage) );
+		HeapManager.Storage.Header * header = headerAddr( addr );
 		if ( (header->kind.fake.alignment & 1) == 1 ) { // fake header ?
 			header = (HeapManager.Storage.Header *)((char *)header - header->kind.fake.offset);
