From c1855793df6eb522961476bded86e3e6dfc5fb11 Mon Sep 17 00:00:00 2001
From: Jan Wieck <JanWieck@Yahoo.com>
Date: Mon, 4 Jan 1999 12:53:23 +0000
Subject: [PATCH] Fixed backend crashing bug in apply_typmod()

Jan
---
 src/backend/utils/adt/numeric.c | 8 ++++++--
 1 file changed, 6 insertions(+), 2 deletions(-)

diff --git a/src/backend/utils/adt/numeric.c b/src/backend/utils/adt/numeric.c
index 8e19c1e6c98..3d7a17e30ef 100644
--- a/src/backend/utils/adt/numeric.c
+++ b/src/backend/utils/adt/numeric.c
@@ -5,7 +5,7 @@
  *
  *	1998 Jan Wieck
  *
- * $Header: /cvsroot/pgsql/src/backend/utils/adt/numeric.c,v 1.6 1999/01/04 11:20:33 wieck Exp $
+ * $Header: /cvsroot/pgsql/src/backend/utils/adt/numeric.c,v 1.7 1999/01/04 12:53:23 wieck Exp $
  *
  * ----------
  */
@@ -2377,7 +2377,7 @@ apply_typmod(NumericVar *var, int32 typmod)
 	}
 
 	i = scale + var->weight + 1;
-	if (var->ndigits > i)
+	if (i >= 0 && var->ndigits > i)
 	{
 		long	carry = (var->digits[i] > 4) ? 1 : 0;
 
@@ -2396,6 +2396,10 @@ apply_typmod(NumericVar *var, int32 typmod)
 			var->weight++;
 		}
 	}
+	else
+	{
+		var->ndigits = MAX(0, MIN(i, var->ndigits));
+	}
 
 	var->rscale = scale;
 	var->dscale = scale;
-- 
GitLab