Description: Do not try to allocate more than the available memory.
Forwarded: no
Author: Peter Pentchev <roam@ringlet.net>
Last-Update: 2025-01-29

--- a/mbuffer.c
+++ b/mbuffer.c
@@ -1090,6 +1090,11 @@
 	if (AvP) {
 		Blocksize = PgSz;
 		Numblocks = AvP/20;
+		if ((Blocksize * (long long)Numblocks) > (long long)SSIZE_MAX) {
+			debugmsg("Cannot allocate that many blocks (%lld * %lld > %lld)\n", (long long)Blocksize, (long long)Numblocks, (long long)SSIZE_MAX);
+			while ((Blocksize * (long long)Numblocks) > (long long)SSIZE_MAX)
+				Numblocks >>= 1;
+		}
 		size_t maxsemv = 2000;
 #ifdef USE_SEMAPHORES
 		if (maxsemv > maxSemValue())
