(Cherry-pick commit
1f3c938 from 'release-7_4' branch.)
Relates to issue #135 on Github.
* alloc.c (GC_WORD_MAX): New macro.
* alloc.c (GC_collect_or_expand): Limit blocks_to_get by
GC_WORD_MAX / HBLKSIZE value (to avoid multiplication overflow in
GC_expand_hp_inner).
/* How many consecutive GC/expansion failures? */
/* Reset by GC_allochblk. */
+#define GC_WORD_MAX (~(word)0)
+
/* Collect or expand heap in an attempt make the indicated number of */
/* free blocks available. Should be called until the blocks are */
/* available (setting retry value to TRUE unless this is the first call */
} else {
blocks_to_get = MAXHINCR;
}
+ if (blocks_to_get > divHBLKSZ(GC_WORD_MAX))
+ blocks_to_get = divHBLKSZ(GC_WORD_MAX);
}
if (!GC_expand_hp_inner(blocks_to_get)