diff --git a/src/backend/utils/adt/cash.c b/src/backend/utils/adt/cash.c index f7e78fa105..8722a7362c 100644 --- a/src/backend/utils/adt/cash.c +++ b/src/backend/utils/adt/cash.c @@ -351,6 +351,11 @@ cash_out(PG_FUNCTION_ARGS) if (value < 0) { + if (pg_sub_s64_overflow(value, 1, &value)) + ereport(ERROR, + (errcode(ERRCODE_NUMERIC_VALUE_OUT_OF_RANGE), + errmsg("value is out of range for type money"))); + /* make the amount positive for digit-reconstruction loop */ value = -value; /* set up formatting data */