The first bug is not releasing a tupdesc when doing an early return out
of the function. The second bug is a logic error in choosing when to do
an early return if given an empty jsonb object.
Bug reports from Pavel Stehule and Tom Lane respectively.
Backpatch to 9.4 where these were introduced.
if (hash_get_num_entries(json_hash) == 0 && rec)
{
hash_destroy(json_hash);
+ ReleaseTupleDesc(tupdesc);
PG_RETURN_POINTER(rec);
}
}
jb = PG_GETARG_JSONB(json_arg_num);
/* same logic as for json */
- if (!have_record_arg && rec)
+ if (JB_ROOT_COUNT(jb) == 0 && rec)
+ {
+ ReleaseTupleDesc(tupdesc);
PG_RETURN_POINTER(rec);
+ }
}
ncolumns = tupdesc->natts;