mirror of
https://github.com/postgres/postgres.git
synced 2025-09-02 04:21:28 +03:00
Fix finalization for json_objectagg and friends
Commitf4fb45d15c
misguidedly tried to free some state during aggregate finalization for json_objectagg. This resulted in attempts to access freed memory, especially when the function is used as a window function. Commit4eb9798879
attempted to ameliorate that, but in fact it should just be ripped out, which is done here. Also add some regression tests for json_objectagg in various flavors as a window function. Original report from Jaime Casanova, diagnosis by Andres Freund. Discussion: https://postgr.es/m/YkfeMNYRCGhySKyg@ahch-to
This commit is contained in:
@@ -1002,13 +1002,6 @@ json_unique_builder_init(JsonUniqueBuilderState *cxt)
|
||||
cxt->skipped_keys.data = NULL;
|
||||
}
|
||||
|
||||
static void
|
||||
json_unique_builder_clean(JsonUniqueBuilderState *cxt)
|
||||
{
|
||||
if (cxt->skipped_keys.data)
|
||||
resetStringInfo(&cxt->skipped_keys);
|
||||
}
|
||||
|
||||
/* On-demand initialization of skipped_keys StringInfo structure */
|
||||
static StringInfo
|
||||
json_unique_builder_get_skipped_keys(JsonUniqueBuilderState *cxt)
|
||||
@@ -1216,8 +1209,6 @@ json_object_agg_finalfn(PG_FUNCTION_ARGS)
|
||||
if (state == NULL)
|
||||
PG_RETURN_NULL();
|
||||
|
||||
json_unique_builder_clean(&state->unique_check);
|
||||
|
||||
/* Else return state with appropriate object terminator added */
|
||||
PG_RETURN_TEXT_P(catenate_stringinfo_string(state->str, " }"));
|
||||
}
|
||||
@@ -1324,9 +1315,6 @@ json_build_object_worker(int nargs, Datum *args, bool *nulls, Oid *types,
|
||||
|
||||
appendStringInfoChar(result, '}');
|
||||
|
||||
if (unique_keys)
|
||||
json_unique_builder_clean(&unique_check);
|
||||
|
||||
return PointerGetDatum(cstring_to_text_with_len(result->data, result->len));
|
||||
}
|
||||
|
||||
|
Reference in New Issue
Block a user