5fe279baa642eaee9b0f292a6a171dcbac1cf350
galt
  Thu Dec 16 00:30:55 2021 -0800
Fixing annoying message in needMem when user passes a signed int that has overflowed. Recent example came in liftOver question from user when they were running on a 3GB file.

diff --git src/lib/memalloc.c src/lib/memalloc.c
index 128824c..bdff614 100644
--- src/lib/memalloc.c
+++ src/lib/memalloc.c
@@ -184,30 +184,34 @@
 {
 void *v;
 v = needHugeMemResize(vp, newSize);
 if (newSize > oldSize)
     memset(((char*)v)+oldSize, 0, newSize-oldSize);
 return v;
 }
 
 #define NEEDMEM_LIMIT 500000000
 
 void *needMem(size_t size)
 /* Need mem calls abort if the memory allocation fails. The memory
  * is initialized to zero. */
 {
 void *pt;
+
+if (size >= 0x8000000000000000)  // caused by overflowed signed int getting sign-extended
+    size += 4294967296;
+
 if (size == 0 || size > NEEDMEM_LIMIT)
     errAbort("needMem: trying to allocate %llu bytes (limit: %llu)",
          (unsigned long long)size, (unsigned long long)NEEDMEM_LIMIT);
 if ((pt = mhStack->alloc(size)) == NULL)
     errAbort("needMem: Out of memory - request size %llu bytes, errno: %d\n",
              (unsigned long long)size, errno);
 memset(pt, 0, size);
 memAlloced += size;
 return pt;
 }
 
 void *needMoreMem(void *old, size_t oldSize, size_t newSize)
 /* Adjust memory size on a block, possibly relocating it.  If vp is NULL, a
  * new memory block is allocated.  No checking on size.  If block is grown,
  * new memory is zeroed. */