summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorPhilip Hazel <ph10@hermes.cam.ac.uk>2005-11-15 11:19:38 +0000
committerPhilip Hazel <ph10@hermes.cam.ac.uk>2005-11-15 11:19:38 +0000
commitf091772774d0a744c3b8488575fc28205e6994b4 (patch)
tree69e8caf9c7b44c0460b7c271a03707bb6daf9e19 /src
parenta0d6ba8acc09196843fdea4132bb0814b2e81132 (diff)
Fix ${if match_address crash when first argument had no @ (and was not
empty).
Diffstat (limited to 'src')
-rw-r--r--src/src/match.c20
1 files changed, 15 insertions, 5 deletions
diff --git a/src/src/match.c b/src/src/match.c
index ace8e016e..7cca71b7f 100644
--- a/src/src/match.c
+++ b/src/src/match.c
@@ -1,4 +1,4 @@
-/* $Cambridge: exim/src/src/match.c,v 1.10 2005/09/12 14:03:42 ph10 Exp $ */
+/* $Cambridge: exim/src/src/match.c,v 1.11 2005/11/15 11:19:38 ph10 Exp $ */
/*************************************************
* Exim - an Internet mail transport agent *
@@ -955,6 +955,20 @@ error = error; /* Keep clever compilers from complaining */
DEBUG(D_lists) debug_printf("address match: subject=%s pattern=%s\n",
subject, pattern);
+/* Find the subject's domain */
+
+sdomain = Ustrrchr(subject, '@');
+
+/* The only case where a subject may not have a domain is if the subject is
+empty. Otherwise, a subject with no domain is a serious configuration error. */
+
+if (sdomain == NULL && *subject != 0)
+ {
+ log_write(0, LOG_MAIN|LOG_PANIC, "no @ found in the subject of an "
+ "address list match: subject=\"%s\" pattern=\"%s\"", subject, pattern);
+ return FAIL;
+ }
+
/* Handle a regular expression, which must match the entire incoming address.
This may be the empty address. */
@@ -989,10 +1003,6 @@ against. */
if (*subject == 0) return (*pattern == 0)? OK : FAIL;
-/* Find the subject's domain */
-
-sdomain = Ustrrchr(subject, '@');
-
/* If the pattern starts with "@@" we have a split lookup, where the domain is
looked up to obtain a list of local parts. If the subject's local part is just
"*" (called from retry) the match always fails. */