https://bugs.winehq.org/show_bug.cgi?id=55809
--- Comment #6 from Alexandre Julliard julliard@winehq.org --- Confirming application bug, it's using unsigned long (32-bit) for pointer arithmetic:
/* Move to the new block. */ pool->nowblock = (VOID **) *(pool->nowblock); /* Find the first item in the block. */ /* Increment by the size of (VOID *). */ alignptr = (unsigned long) (pool->nowblock + 1); /* Align the item on an `alignbytes'-byte boundary. */ pool->nextitem = (VOID *) (alignptr + (unsigned long) pool->alignbytes - (alignptr % (unsigned long) pool->alignbytes));
(in triangle/triangle.c:poolalloc)