From 0a40563eadc67472d6fd50dabf7002afa25c3330 Mon Sep 17 00:00:00 2001 From: Peter Eisentraut Date: Thu, 18 Jun 2020 08:41:31 +0200 Subject: Disallow factorial of negative numbers The previous implementation returned 1 for all negative numbers, which is not sensible under any definition. Discussion: https://www.postgresql.org/message-id/flat/6ce1df0e-86a3-e544-743a-f357ff663f68%402ndquadrant.com --- src/backend/utils/adt/numeric.c | 4 ++++ 1 file changed, 4 insertions(+) (limited to 'src/backend/utils/adt/numeric.c') diff --git a/src/backend/utils/adt/numeric.c b/src/backend/utils/adt/numeric.c index eea42398541..5f23f2afac8 100644 --- a/src/backend/utils/adt/numeric.c +++ b/src/backend/utils/adt/numeric.c @@ -2946,6 +2946,10 @@ numeric_fac(PG_FUNCTION_ARGS) NumericVar fact; NumericVar result; + if (num < 0) + ereport(ERROR, + (errcode(ERRCODE_NUMERIC_VALUE_OUT_OF_RANGE), + errmsg("factorial of a negative number is undefined"))); if (num <= 1) { res = make_result(&const_one); -- cgit v1.2.3