Index: trgm_op.c
===================================================================
RCS file: /home/hlinnaka/pgcvsrepository/pgsql/contrib/pg_trgm/trgm_op.c,v
retrieving revision 1.8
diff -c -r1.8 trgm_op.c
*** trgm_op.c	28 Feb 2007 22:44:38 -0000	1.8
--- trgm_op.c	12 Jul 2007 22:28:43 -0000
***************
*** 194,212 ****
  	Datum	   *d;
  	ArrayType  *a;
  	trgm	   *ptr;
  
  	trg = generate_trgm(VARDATA(in), VARSIZE(in) - VARHDRSZ);
  	d = (Datum *) palloc(sizeof(Datum) * (1 + ARRNELEM(trg)));
  
! 	ptr = GETARR(trg);
! 	while (ptr - GETARR(trg) < ARRNELEM(trg))
  	{
  		text	   *item = (text *) palloc(VARHDRSZ + 3);
  
  		SET_VARSIZE(item, VARHDRSZ + 3);
  		CPTRGM(VARDATA(item), ptr);
! 		d[ptr - GETARR(trg)] = PointerGetDatum(item);
! 		ptr++;
  	}
  
  	a = construct_array(
--- 194,211 ----
  	Datum	   *d;
  	ArrayType  *a;
  	trgm	   *ptr;
+ 	int			i;
  
  	trg = generate_trgm(VARDATA(in), VARSIZE(in) - VARHDRSZ);
  	d = (Datum *) palloc(sizeof(Datum) * (1 + ARRNELEM(trg)));
  
! 	for (i = 0, ptr = GETARR(trg); i < ARRNELEM(trg); i++, ptr++)
  	{
  		text	   *item = (text *) palloc(VARHDRSZ + 3);
  
  		SET_VARSIZE(item, VARHDRSZ + 3);
  		CPTRGM(VARDATA(item), ptr);
! 		d[i] = PointerGetDatum(item);
  	}
  
  	a = construct_array(
***************
*** 218,229 ****
  						'i'
  		);
  
! 	ptr = GETARR(trg);
! 	while (ptr - GETARR(trg) < ARRNELEM(trg))
! 	{
! 		pfree(DatumGetPointer(d[ptr - GETARR(trg)]));
! 		ptr++;
! 	}
  
  	pfree(d);
  	pfree(trg);
--- 217,224 ----
  						'i'
  		);
  
! 	for (i = 0; i < ARRNELEM(trg); i++)
! 		pfree(DatumGetPointer(d[i]));
  
  	pfree(d);
  	pfree(trg);
