From ad0f1e15514c2429dae0b6abed49c4f947e6f2fc Mon Sep 17 00:00:00 2001 From: Alexander Korotkov Date: Mon, 6 Jul 2020 14:59:34 +0300 Subject: [PATCH 2/2] Forbid NaNs in jsonpath --- src/backend/utils/adt/jsonb_util.c | 9 ++------- src/backend/utils/adt/jsonpath_exec.c | 2 +- 2 files changed, 3 insertions(+), 8 deletions(-) diff --git a/src/backend/utils/adt/jsonb_util.c b/src/backend/utils/adt/jsonb_util.c index 04b70c805b4..d73dd40ffc9 100644 --- a/src/backend/utils/adt/jsonb_util.c +++ b/src/backend/utils/adt/jsonb_util.c @@ -1773,13 +1773,8 @@ convertJsonbScalar(StringInfo buffer, JEntry *jentry, JsonbValue *scalarVal) break; case jbvNumeric: - /* replace numeric NaN with string "NaN" */ - if (numeric_is_nan(scalarVal->val.numeric)) - { - appendToBuffer(buffer, "NaN", 3); - *jentry = 3; - break; - } + /* we shouldn't end up with NaN in JsonbValue */ + Assert(!numeric_is_nan(scalarVal->val.numeric)); numlen = VARSIZE_ANY(scalarVal->val.numeric); padlen = padBufferToInt(buffer); diff --git a/src/backend/utils/adt/jsonpath_exec.c b/src/backend/utils/adt/jsonpath_exec.c index e4c1bcadb2e..ca41d0bce47 100644 --- a/src/backend/utils/adt/jsonpath_exec.c +++ b/src/backend/utils/adt/jsonpath_exec.c @@ -1073,7 +1073,7 @@ executeItemOptUnwrapTarget(JsonPathExecContext *cxt, JsonPathItem *jsp, tmp, &have_error); - if (have_error || isinf(val)) + if (have_error || isinf(val) || isnan(val)) RETURN_ERROR(ereport(ERROR, (errcode(ERRCODE_NON_NUMERIC_SQL_JSON_ITEM), errmsg("jsonpath item method .%s() can only be applied to a valid string representation of double precision value", -- 2.14.3