0002-Forbid-NaNs-in-jsonpath.patch
application/octet-stream
Filename: 0002-Forbid-NaNs-in-jsonpath.patch
Type: application/octet-stream
Part: 1
Message:
Re: jsonpath versus NaN
Patch
Format: format-patch
Series: patch 0002
Subject: Forbid NaNs in jsonpath
| File | + | − |
|---|---|---|
| src/backend/utils/adt/jsonb_util.c | 2 | 7 |
| src/backend/utils/adt/jsonpath_exec.c | 1 | 1 |
From ad0f1e15514c2429dae0b6abed49c4f947e6f2fc Mon Sep 17 00:00:00 2001
From: Alexander Korotkov <akorotkov@postgresql.org>
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