diff --git a/src/backend/utils/adt/varlena.c b/src/backend/utils/adt/varlena.c index 779729d724..2fbbf5475e 100644 --- a/src/backend/utils/adt/varlena.c +++ b/src/backend/utils/adt/varlena.c @@ -2034,13 +2034,9 @@ bttext_abbrev_convert(Datum original, SortSupport ssup) } /* Just like strcoll(), strxfrm() expects a NUL-terminated string */ - memcpy(tss->buf1, VARDATA_ANY(authoritative), len); + memcpy(tss->buf1, authoritative_data, len); tss->buf1[len] = '\0'; - /* Don't leak memory here */ - if (PointerGetDatum(authoritative) != original) - pfree(authoritative); - for (;;) { #ifdef HAVE_LOCALE_T @@ -2108,6 +2104,10 @@ bttext_abbrev_convert(Datum original, SortSupport ssup) addHyperLogLog(&tss->abbr_card, hash); + /* Don't leak memory here */ + if (PointerGetDatum(authoritative) != original) + pfree(authoritative); + return res; }