diff --git a/rtl/inc/tinyheap.inc b/rtl/inc/tinyheap.inc
index c284d026d5..87a98d0e5a 100644
--- a/rtl/inc/tinyheap.inc
+++ b/rtl/inc/tinyheap.inc
@@ -57,6 +57,7 @@
 
     const
       TinyHeapMinBlock = sizeof(TTinyHeapBlock);
+      TinyHeapMaxBlock = High(ptruint) - sizeof(TTinyHeapBlock) - sizeof(TTinyHeapMemBlockSize);
 
       TinyHeapAllocGranularity = sizeof(TTinyHeapBlock);
 
@@ -96,6 +97,8 @@
 {$ifdef DEBUG_TINY_HEAP}
         Write('SysGetMem(', Size, ')=');
 {$endif DEBUG_TINY_HEAP}
+        if size>TinyHeapMaxBlock then
+          HandleError(203);
         AllocSize := align(size+sizeof(TTinyHeapMemBlockSize), TinyHeapAllocGranularity);
 
         p := FreeList;
@@ -320,6 +323,8 @@
             if (TTinyHeapPointerArithmeticType(p) < TTinyHeapPointerArithmeticType(HeapOrg)) or
                (TTinyHeapPointerArithmeticType(p) >= TTinyHeapPointerArithmeticType(HeapPtr)) then
               HandleError(204);
+            if size>TinyHeapMaxBlock then
+              HandleError(203);
             oldsize := FindSize(p);
             OldAllocSize := align(oldsize+sizeof(TTinyHeapMemBlockSize), TinyHeapAllocGranularity);
             NewAllocSize := align(size+sizeof(TTinyHeapMemBlockSize), TinyHeapAllocGranularity);