In bttext_abbrev_convert, move pfree to the right place.

Without this, we might access memory that's already been freed, or
leak memory if in the C locale.

Peter Geoghegan
This commit is contained in:
Robert Haas 2015-06-29 23:53:05 -04:00
parent 47fe4d25d5
commit b48ecf862b
1 changed files with 5 additions and 5 deletions

View File

@ -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;
}