diff --git a/src/backend/tsearch/to_tsany.c b/src/backend/tsearch/to_tsany.c index 17b86ec03e2ebc023ad026ea73e74f0a6218d2cc..5e1f82ba59ca8119e429d67c30def8b8903ea340 100644 --- a/src/backend/tsearch/to_tsany.c +++ b/src/backend/tsearch/to_tsany.c @@ -7,7 +7,7 @@ * * * IDENTIFICATION - * $PostgreSQL: pgsql/src/backend/tsearch/to_tsany.c,v 1.9 2008/03/05 15:50:37 momjian Exp $ + * $PostgreSQL: pgsql/src/backend/tsearch/to_tsany.c,v 1.10 2008/03/07 14:30:20 teodor Exp $ * *------------------------------------------------------------------------- */ @@ -350,6 +350,18 @@ to_tsquery_byid(PG_FUNCTION_ARGS) PG_RETURN_POINTER(query); } memcpy((void *) GETQUERY(query), (void *) res, len * sizeof(QueryItem)); + + if ( len != query->size ) { + char *oldoperand = GETOPERAND(query); + int4 lenoperand = VARSIZE(query) - (oldoperand - (char*)query); + + Assert( len < query->size ); + + query->size = len; + memcpy((void *) GETOPERAND(query), oldoperand, VARSIZE(query) - (oldoperand - (char*)query) ); + SET_VARSIZE(query, COMPUTESIZE( len, lenoperand )); + } + pfree(res); PG_RETURN_TSQUERY(query); } @@ -388,6 +400,18 @@ plainto_tsquery_byid(PG_FUNCTION_ARGS) PG_RETURN_POINTER(query); } memcpy((void *) GETQUERY(query), (void *) res, len * sizeof(QueryItem)); + + if ( len != query->size ) { + char *oldoperand = GETOPERAND(query); + int4 lenoperand = VARSIZE(query) - (oldoperand - (char*)query); + + Assert( len < query->size ); + + query->size = len; + memcpy((void *) GETOPERAND(query), oldoperand, lenoperand ); + SET_VARSIZE(query, COMPUTESIZE( len, lenoperand )); + } + pfree(res); PG_RETURN_POINTER(query); }