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