diff options
Diffstat (limited to 'src/backend/utils/adt/jsonfuncs.c')
-rw-r--r-- | src/backend/utils/adt/jsonfuncs.c | 7 |
1 files changed, 5 insertions, 2 deletions
diff --git a/src/backend/utils/adt/jsonfuncs.c b/src/backend/utils/adt/jsonfuncs.c index c14d3f73fca..13d5b7af2f4 100644 --- a/src/backend/utils/adt/jsonfuncs.c +++ b/src/backend/utils/adt/jsonfuncs.c @@ -3814,11 +3814,14 @@ setPathArray(JsonbIterator **it, Datum *path_elems, bool *path_nulls, if (level < path_len && !path_nulls[level]) { char *c = VARDATA_ANY(path_elems[level]); + long lindex; errno = 0; - idx = (int) strtol(c, &badp, 10); - if (errno != 0 || badp == c) + lindex = strtol(c, &badp, 10); + if (errno != 0 || badp == c || lindex > INT_MAX || lindex < INT_MIN) idx = nelems; + else + idx = lindex; } else idx = nelems; |