diff options
Diffstat (limited to 'src/backend/utils/adt/varlena.c')
-rw-r--r-- | src/backend/utils/adt/varlena.c | 12 |
1 files changed, 6 insertions, 6 deletions
diff --git a/src/backend/utils/adt/varlena.c b/src/backend/utils/adt/varlena.c index 1aff04fa77d..72e1e24fe02 100644 --- a/src/backend/utils/adt/varlena.c +++ b/src/backend/utils/adt/varlena.c @@ -5289,13 +5289,12 @@ string_agg_deserialize(PG_FUNCTION_ARGS) sstate = PG_GETARG_BYTEA_PP(0); /* - * Fake up a StringInfo pointing to the bytea's value so we can "receive" - * the serialized aggregate state value. + * Copy the bytea into a StringInfo so that we can "receive" it using the + * standard recv-function infrastructure. */ - buf.data = VARDATA_ANY(sstate); - buf.len = VARSIZE_ANY_EXHDR(sstate); - buf.maxlen = 0; - buf.cursor = 0; + initStringInfo(&buf); + appendBinaryStringInfo(&buf, + VARDATA_ANY(sstate), VARSIZE_ANY_EXHDR(sstate)); result = makeStringAggState(fcinfo); @@ -5308,6 +5307,7 @@ string_agg_deserialize(PG_FUNCTION_ARGS) appendBinaryStringInfo(result, data, datalen); pq_getmsgend(&buf); + pfree(buf.data); PG_RETURN_POINTER(result); } |