diff --git a/src/backend/utils/adt/varlena.c b/src/backend/utils/adt/varlena.c index 693ccc5..3df54ed 100644 --- a/src/backend/utils/adt/varlena.c +++ b/src/backend/utils/adt/varlena.c @@ -4136,6 +4136,10 @@ replace_text(PG_FUNCTION_ARGS) initStringInfo(&str); + /* allocate a varlena header at the start of the stringinfo */ + enlargeStringInfo(&str, VARHDRSZ); + str.len += VARHDRSZ; + do { CHECK_FOR_INTERRUPTS(); @@ -4160,8 +4164,8 @@ replace_text(PG_FUNCTION_ARGS) text_position_cleanup(&state); - ret_text = cstring_to_text_with_len(str.data, str.len); - pfree(str.data); + ret_text = (text*) str.data; + SET_VARSIZE(ret_text, str.len); /* VARHDRSZ is already included in str.len */ PG_RETURN_TEXT_P(ret_text); }