diff --git a/src/backend/utils/adt/numeric.c b/src/backend/utils/adt/numeric.c
index 8e19c1e6c98d8c7556e6e67e82f63f7e277a19fb..3d7a17e30ef5b46c965cf58dbce64740089c522a 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;