@@ -340,6 +340,7 @@ to_tsquery_byid(PG_FUNCTION_ARGS)
340340if (query -> size == 0 )
341341PG_RETURN_TSQUERY (query );
342342
343+ /* clean out any stopword placeholders from the tree */
343344res = clean_fakeval (GETQUERY (query ),& len );
344345if (!res )
345346{
@@ -349,6 +350,10 @@ to_tsquery_byid(PG_FUNCTION_ARGS)
349350}
350351memcpy ((void * )GETQUERY (query ), (void * )res ,len * sizeof (QueryItem ));
351352
353+ /*
354+ * Removing the stopword placeholders might've resulted in fewer
355+ * QueryItems. If so, move the operands up accordingly.
356+ */
352357if (len != query -> size )
353358{
354359char * oldoperand = GETOPERAND (query );
@@ -357,7 +362,7 @@ to_tsquery_byid(PG_FUNCTION_ARGS)
357362Assert (len < query -> size );
358363
359364query -> size = len ;
360- memcpy ((void * )GETOPERAND (query ),oldoperand ,VARSIZE (query )- (oldoperand - (char * )query ));
365+ memmove ((void * )GETOPERAND (query ),oldoperand ,VARSIZE (query )- (oldoperand - (char * )query ));
361366SET_VARSIZE (query ,COMPUTESIZE (len ,lenoperand ));
362367}
363368