aboutsummaryrefslogtreecommitdiff
path: root/contrib/btree_gist/btree_text.c
diff options
context:
space:
mode:
Diffstat (limited to 'contrib/btree_gist/btree_text.c')
-rw-r--r--contrib/btree_gist/btree_text.c12
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;
}