diff options
Diffstat (limited to 'contrib/btree_gist/btree_text.c')
-rw-r--r-- | contrib/btree_gist/btree_text.c | 12 |
1 files changed, 8 insertions, 4 deletions
diff --git a/contrib/btree_gist/btree_text.c b/contrib/btree_gist/btree_text.c index 0ce847369e2..fac9f554c0f 100644 --- a/contrib/btree_gist/btree_text.c +++ b/contrib/btree_gist/btree_text.c @@ -65,13 +65,15 @@ static bytea * gbt_text_xfrm ( bytea * leaf ) { bytea * out = leaf; - int32 ilen = VARSIZE (leaf) - VARHDRSZ; int32 olen ; - char sin[ilen+1]; - char * sou = NULL; - memcpy ( (void*)&sin[0], (void*) VARDATA(leaf) ,ilen ); + char * sin; + char * sou; + + sin = palloc(ilen + 1); + memcpy (sin, (void*) VARDATA(leaf) ,ilen ); sin[ilen] = '\0'; + olen = strxfrm ( NULL, &sin[0], 0 ) + 1; sou = palloc ( olen ); olen = strxfrm ( sou , &sin[0] , olen ); @@ -80,7 +82,9 @@ gbt_text_xfrm ( bytea * leaf ) out->vl_len = olen+1; memcpy( (void*) VARDATA(out), sou, olen-VARHDRSZ ); ((char*)out)[olen] = '\0'; + pfree(sou); + pfree(sin); return out; } |