From: Philip Hazel Date: Tue, 2 Aug 2005 13:43:04 +0000 (+0000) Subject: Add missing search_tidyup() calls for the subprocess used for running X-Git-Tag: exim-4_53~67 X-Git-Url: https://git.exim.org/users/jgh/exim.git/commitdiff_plain/af46795e64ccdde2432105a8549a5da4b54546e9?ds=sidebyside Add missing search_tidyup() calls for the subprocess used for running filters. --- diff --git a/doc/doc-txt/ChangeLog b/doc/doc-txt/ChangeLog index 2325cdb88..0283defca 100644 --- a/doc/doc-txt/ChangeLog +++ b/doc/doc-txt/ChangeLog @@ -1,4 +1,4 @@ -$Cambridge: exim/doc/doc-txt/ChangeLog,v 1.194 2005/08/02 11:23:27 ph10 Exp $ +$Cambridge: exim/doc/doc-txt/ChangeLog,v 1.195 2005/08/02 13:43:04 ph10 Exp $ Change log file for Exim from version 4.21 ------------------------------------------- @@ -45,6 +45,11 @@ PH/11 Added support for the IGNOREQUOTA extension to LMTP, both to the lmtp TK/02 Remove one case of BASE64 error detection FTTB (undocumented anyway). +PH/12 There was a missing call to search_tidyup() before the fork() in rda.c to + run a filter in a subprocess. This could lead to confusion in subsequent + lookups in the parent process. There should also be a search_tidyup() at + the end of the subprocess. + Exim version 4.52 ----------------- diff --git a/src/src/rda.c b/src/src/rda.c index 06eff227e..7819a8023 100644 --- a/src/src/rda.c +++ b/src/src/rda.c @@ -1,4 +1,4 @@ -/* $Cambridge: exim/src/src/rda.c,v 1.8 2005/06/27 14:29:43 ph10 Exp $ */ +/* $Cambridge: exim/src/src/rda.c,v 1.9 2005/08/02 13:43:04 ph10 Exp $ */ /************************************************* * Exim - an Internet mail transport agent * @@ -607,9 +607,13 @@ if (pipe(pfd) != 0) /* Ensure that SIGCHLD is set to SIG_DFL before forking, so that the child process can be waited for. We sometimes get here with it set otherwise. Save -the old state for resetting on the wait. */ +the old state for resetting on the wait. Ensure that all cached resources are +freed so that the subprocess starts with a clean slate and doesn't interfere +with the parent process. */ oldsignal = signal(SIGCHLD, SIG_DFL); +search_tidyup(); + if ((pid = fork()) == 0) { header_line *waslast = header_last; /* Save last header */ @@ -740,9 +744,11 @@ if ((pid = fork()) == 0) rda_write_string(fd, NULL); /* Marks end of addresses */ } - /* OK, this process is now done. Must use _exit() and not exit() !! */ + /* OK, this process is now done. Free any cached resources. Must use _exit() + and not exit() !! */ (void)close(fd); + search_tidyup(); _exit(0); }