From 85c17dbff8ade0c5237e3ac1ece7cacacfdde399 Mon Sep 17 00:00:00 2001
From: Tom Lane <tgl@sss.pgh.pa.us>
Date: Tue, 6 Feb 2001 01:53:53 +0000
Subject: [PATCH] Out-of-bounds memory allocation request sizes should be
 treated as just elog(ERROR) not an Assert trap, since we've downgraded
 out-of-memory to elog(ERROR) not a fatal error.  Also, change the hard
 boundary from 256Mb to 1Gb, just so that anyone who's actually got that much
 memory to spare can play with TOAST objects approaching a gigabyte.

---
 src/backend/utils/error/excid.c | 14 +-------------
 src/backend/utils/mmgr/mcxt.c   | 12 +++++++-----
 src/include/utils/excid.h       |  4 +---
 src/include/utils/memutils.h    |  9 +++++----
 4 files changed, 14 insertions(+), 25 deletions(-)

diff --git a/src/backend/utils/error/excid.c b/src/backend/utils/error/excid.c
index bef1c00856b..877610176a3 100644
--- a/src/backend/utils/error/excid.c
+++ b/src/backend/utils/error/excid.c
@@ -8,7 +8,7 @@
  *
  *
  * IDENTIFICATION
- *	  $Header: /cvsroot/pgsql/src/backend/utils/error/Attic/excid.c,v 1.9 2001/01/24 19:43:15 momjian Exp $
+ *	  $Header: /cvsroot/pgsql/src/backend/utils/error/Attic/excid.c,v 1.10 2001/02/06 01:53:53 tgl Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -42,18 +42,6 @@ Exception	BadArg = {"Bad Argument to Function Call"};
  *	 Specific Recoverable Exceptions										 *
  *****************************************************************************/
 
-/*
- * BadAllocSize
- *		Indicates that an allocation request is of unreasonable size.
- */
-Exception	BadAllocSize = {"Too Large Allocation Request"};
-
-/*
- * ExhaustedMemory
- *		Indicates an dynamic memory allocation failed.
- */
-Exception	ExhaustedMemory = {"Memory Allocation Failed"};
-
 /*
  * Unimplemented
  *		Indicates a function call request requires unimplemented code.
diff --git a/src/backend/utils/mmgr/mcxt.c b/src/backend/utils/mmgr/mcxt.c
index 0520cb6d0a6..ab8434a0581 100644
--- a/src/backend/utils/mmgr/mcxt.c
+++ b/src/backend/utils/mmgr/mcxt.c
@@ -14,7 +14,7 @@
  *
  *
  * IDENTIFICATION
- *	  $Header: /cvsroot/pgsql/src/backend/utils/mmgr/mcxt.c,v 1.26 2001/01/24 19:43:16 momjian Exp $
+ *	  $Header: /cvsroot/pgsql/src/backend/utils/mmgr/mcxt.c,v 1.27 2001/02/06 01:53:53 tgl Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -417,8 +417,9 @@ MemoryContextAlloc(MemoryContext context, Size size)
 {
 	AssertArg(MemoryContextIsValid(context));
 
-	LogTrap(!AllocSizeIsValid(size), BadAllocSize,
-			("size=%d [0x%x]", size, size));
+	if (!AllocSizeIsValid(size))
+		elog(ERROR, "MemoryContextAlloc: invalid request size %lu",
+			 (unsigned long) size);
 
 	return (*context->methods->alloc) (context, size);
 }
@@ -474,8 +475,9 @@ repalloc(void *pointer, Size size)
 
 	AssertArg(MemoryContextIsValid(header->context));
 
-	LogTrap(!AllocSizeIsValid(size), BadAllocSize,
-			("size=%d [0x%x]", size, size));
+	if (!AllocSizeIsValid(size))
+		elog(ERROR, "repalloc: invalid request size %lu",
+			 (unsigned long) size);
 
     return (*header->context->methods->realloc) (header->context,
 												 pointer, size);
diff --git a/src/include/utils/excid.h b/src/include/utils/excid.h
index 88ba06dc2a8..d1bbcbb21bd 100644
--- a/src/include/utils/excid.h
+++ b/src/include/utils/excid.h
@@ -7,7 +7,7 @@
  * Portions Copyright (c) 1996-2001, PostgreSQL Global Development Group
  * Portions Copyright (c) 1994, Regents of the University of California
  *
- * $Id: excid.h,v 1.8 2001/01/24 19:43:28 momjian Exp $
+ * $Id: excid.h,v 1.9 2001/02/06 01:53:52 tgl Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -18,8 +18,6 @@
 extern Exception FailedAssertion;
 extern Exception BadState;
 extern Exception BadArg;
-extern Exception BadAllocSize;
-extern Exception ExhaustedMemory;
 extern Exception Unimplemented;
 
 extern Exception CatalogFailure;/* XXX inconsistent naming style */
diff --git a/src/include/utils/memutils.h b/src/include/utils/memutils.h
index 28cf6b33549..7ba0719dcb5 100644
--- a/src/include/utils/memutils.h
+++ b/src/include/utils/memutils.h
@@ -10,7 +10,7 @@
  * Portions Copyright (c) 1996-2001, PostgreSQL Global Development Group
  * Portions Copyright (c) 1994, Regents of the University of California
  *
- * $Id: memutils.h,v 1.41 2001/01/24 19:43:28 momjian Exp $
+ * $Id: memutils.h,v 1.42 2001/02/06 01:53:52 tgl Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -22,16 +22,17 @@
 
 /*
  * MaxAllocSize
- *		Arbitrary limit on size of allocations.
+ *		Quasi-arbitrary limit on size of allocations.
  *
  * Note:
  *		There is no guarantee that allocations smaller than MaxAllocSize
  *		will succeed.  Allocation requests larger than MaxAllocSize will
  *		be summarily denied.
  *
- * XXX This should be defined in a file of tunable constants.
+ * XXX This is deliberately chosen to correspond to the limiting size
+ * of varlena objects under TOAST.  See VARATT_MASK_SIZE in postgres.h.
  */
-#define MaxAllocSize	((Size) 0xfffffff)		/* 16G - 1 */
+#define MaxAllocSize	((Size) 0x3fffffff)	/* 1 gigabyte - 1 */
 
 #define AllocSizeIsValid(size)	(0 < (size) && (size) <= MaxAllocSize)
 
-- 
GitLab