X-Git-Url: https://vcs.fsf.org/?a=blobdiff_plain;f=src%2Fsrc%2Flookups%2Flsearch.c;h=4b3c7e23353bc7de6120e5d63d949a3ae941ad71;hb=184e88237dea64ce48076cdd0184612d057cbafd;hp=c5e75dfddc97611c0430306095dbc3ac5e355513;hpb=f1e894f37fb99398f7447220925a915bd031491a;p=exim.git diff --git a/src/src/lookups/lsearch.c b/src/src/lookups/lsearch.c index c5e75dfdd..4b3c7e233 100644 --- a/src/src/lookups/lsearch.c +++ b/src/src/lookups/lsearch.c @@ -1,10 +1,10 @@ -/* $Cambridge: exim/src/src/lookups/lsearch.c,v 1.4 2005/06/27 14:29:44 ph10 Exp $ */ +/* $Cambridge: exim/src/src/lookups/lsearch.c,v 1.8 2007/01/08 10:50:19 ph10 Exp $ */ /************************************************* * Exim - an Internet mail transport agent * *************************************************/ -/* Copyright (c) University of Cambridge 1995 - 2005 */ +/* Copyright (c) University of Cambridge 1995 - 2007 */ /* See the file NOTICE for conditions of use and distribution. */ #include "../exim.h" @@ -197,7 +197,16 @@ for (last_was_eol = TRUE; if (rc == FAIL) continue; if (rc == DEFER) return DEFER; } - break; /* Key matched */ + + /* The key has matched. If the search involved a regular expression, it + might have caused numerical variables to be set. However, their values will + be in the wrong storage pool for external use. Copying them to the standard + pool is not feasible because of the caching of lookup results - a repeated + lookup will not match the regular expression again. Therefore, we flatten + all numeric variables at this point. */ + + expand_nmax = -1; + break; /* Compare an ip address against a list of network/ip addresses. We have to allow for the "*" case specially. */ @@ -369,7 +378,7 @@ iplsearch_find(void *handle, uschar *filename, uschar *keystring, int length, { do_cache = do_cache; /* Keep picky compilers happy */ if ((length == 1 && keystring[0] == '*') || - string_is_ip_address(keystring, NULL) > 0) + string_is_ip_address(keystring, NULL) != 0) { return internal_lsearch_find(handle, filename, keystring, length, result, errmsg, LSEARCH_IP);