diff --git a/src/backend/utils/adt/jsonb_util.c b/src/backend/utils/adt/jsonb_util.c index e7811647f0..9cc95b773d 100644 --- a/src/backend/utils/adt/jsonb_util.c +++ b/src/backend/utils/adt/jsonb_util.c @@ -1970,22 +1970,25 @@ uniqueifyJsonbObject(JsonbValue *object, bool unique_keys, bool skip_nulls) object->val.object.nPairs--; } - ptr = object->val.object.pairs + 1; - res = object->val.object.pairs; - - while (ptr - object->val.object.pairs < object->val.object.nPairs) + if (object->val.object.nPairs > 0) { - /* Avoid copying over duplicate or null */ - if (lengthCompareJsonbStringValue(ptr, res) != 0 && - (!skip_nulls || ptr->value.type != jbvNull)) + ptr = object->val.object.pairs + 1; + res = object->val.object.pairs; + + while (ptr - object->val.object.pairs < object->val.object.nPairs) { - res++; - if (ptr != res) - memcpy(res, ptr, sizeof(JsonbPair)); + /* Avoid copying over duplicate or null */ + if (lengthCompareJsonbStringValue(ptr, res) != 0 && + (!skip_nulls || ptr->value.type != jbvNull)) + { + res++; + if (ptr != res) + memcpy(res, ptr, sizeof(JsonbPair)); + } + ptr++; } - ptr++; - } - object->val.object.nPairs = res + 1 - object->val.object.pairs; + object->val.object.nPairs = res + 1 - object->val.object.pairs; + } } }