aboutsummaryrefslogtreecommitdiff
path: root/src/backend/utils/adt/jsonfuncs.c
diff options
context:
space:
mode:
authorAndrew Dunstan <andrew@dunslane.net>2013-04-04 18:26:52 -0400
committerAndrew Dunstan <andrew@dunslane.net>2013-04-04 18:26:52 -0400
commite75feb28341ea49e9d41266906e701a4e3742e2e (patch)
tree3a9f4b962a0fdc5a0d9660b616a01f2362ecbbf5 /src/backend/utils/adt/jsonfuncs.c
parent48a2cd370e2610f0a196240aed9f5abd82d3dada (diff)
downloadpostgresql-e75feb28341ea49e9d41266906e701a4e3742e2e.tar.gz
postgresql-e75feb28341ea49e9d41266906e701a4e3742e2e.zip
Fix off by one error in JSON extract path code.
Bug report by David Wheeler, diagnosis assistance from Tom Lane.
Diffstat (limited to 'src/backend/utils/adt/jsonfuncs.c')
-rw-r--r--src/backend/utils/adt/jsonfuncs.c8
1 files changed, 6 insertions, 2 deletions
diff --git a/src/backend/utils/adt/jsonfuncs.c b/src/backend/utils/adt/jsonfuncs.c
index 63df1ac6777..73bcdf46b12 100644
--- a/src/backend/utils/adt/jsonfuncs.c
+++ b/src/backend/utils/adt/jsonfuncs.c
@@ -682,9 +682,13 @@ get_array_start(void *state)
ereport(ERROR,
(errcode(ERRCODE_INVALID_PARAMETER_VALUE),
errmsg("cannot extract field from a non-object")));
- /* initialize array count for this nesting level */
+ /*
+ * initialize array count for this nesting level
+ * Note: the lex_level seen by array_start is one less than that seen by
+ * the elements of the array.
+ */
if (_state->search_type == JSON_SEARCH_PATH &&
- lex_level <= _state->npath)
+ lex_level < _state->npath)
_state->array_level_index[lex_level] = -1;
}