From: Teodor Sigaev Date: Wed, 28 Jan 2009 18:32:55 +0000 (+0000) Subject: Fix bug with multiple evaluation of tsearch2 compatibility trigger, trigger X-Git-Tag: REL8_3_6~8 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=e40c166d6ec87b71500c8034fd2ce3d1ec3d2c26;p=postgresql Fix bug with multiple evaluation of tsearch2 compatibility trigger, trigger data should be restored. Backpatch only for 8.3 because previous versions haven't such layer. --- diff --git a/contrib/tsearch2/tsearch2.c b/contrib/tsearch2/tsearch2.c index 9dc5eb3bdb..c0ba00eafe 100644 --- a/contrib/tsearch2/tsearch2.c +++ b/contrib/tsearch2/tsearch2.c @@ -7,7 +7,7 @@ * * * IDENTIFICATION - * $PostgreSQL: pgsql/contrib/tsearch2/tsearch2.c,v 1.5 2008/01/01 19:45:45 momjian Exp $ + * $PostgreSQL: pgsql/contrib/tsearch2/tsearch2.c,v 1.5.2.1 2009/01/28 18:32:55 teodor Exp $ * *------------------------------------------------------------------------- */ @@ -372,8 +372,10 @@ tsa_tsearch2(PG_FUNCTION_ARGS) { TriggerData *trigdata; Trigger *trigger; - char **tgargs; + char **tgargs, + **tgargs_old; int i; + Datum res; /* Check call context */ if (!CALLED_AS_TRIGGER(fcinfo)) /* internal error */ @@ -393,10 +395,20 @@ tsa_tsearch2(PG_FUNCTION_ARGS) tgargs[1] = pstrdup(GetConfigOptionByName("default_text_search_config", NULL)); + tgargs_old = trigger->tgargs; trigger->tgargs = tgargs; trigger->tgnargs++; - return tsvector_update_trigger_byid(fcinfo); + res = tsvector_update_trigger_byid(fcinfo); + + /* restore old trigger data */ + trigger->tgargs = tgargs_old; + trigger->tgnargs--; + + pfree(tgargs[1]); + pfree(tgargs); + + return res; }