Skip to content
Snippets Groups Projects
Commit 3b8bca33 authored by Teodor Sigaev's avatar Teodor Sigaev
Browse files

Fix memory arrangement of tsquery after removing stop words. It causes

a unused memory holes in tsquery.

Per report by Richard Huxton <dev@archonet.com>.

It was working well because in fact tsquery->size is not used for any
kind of operation except comparing tsqueries. So, in HEAD it's enough to
fix to_tsquery function, but for previous version it's needed to
remove optimization in CompareTSQ to prevent requirement of renew all
stored tsquery.
parent 588d213a
No related branches found
No related tags found
No related merge requests found
......@@ -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);
}
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment