ph10 2005/11/15 11:19:38 GMT
Modified files:
exim-doc/doc-txt ChangeLog
exim-src/src match.c
Log:
Fix ${if match_address crash when first argument had no @ (and was not
empty).
Revision Changes Path
1.263 +4 -0 exim/exim-doc/doc-txt/ChangeLog
1.11 +14 -4 exim/exim-src/src/match.c
Index: ChangeLog
===================================================================
RCS file: /home/cvs/exim/exim-doc/doc-txt/ChangeLog,v
retrieving revision 1.262
retrieving revision 1.263
diff -u -r1.262 -r1.263
--- ChangeLog 15 Nov 2005 10:08:24 -0000 1.262
+++ ChangeLog 15 Nov 2005 11:19:38 -0000 1.263
@@ -1,4 +1,4 @@
-$Cambridge: exim/exim-doc/doc-txt/ChangeLog,v 1.262 2005/11/15 10:08:24 ph10 Exp $
+$Cambridge: exim/exim-doc/doc-txt/ChangeLog,v 1.263 2005/11/15 11:19:38 ph10 Exp $
Change log file for Exim from version 4.21
-------------------------------------------
@@ -129,6 +129,10 @@
PH/14 Add check_rfc2047_length to disable enforcement of RFC 2047 length
checking when decoding. Apparently there are clients that generate
overlong encoded strings. Why am I not surprised?
+
+PH/15 If the first argument of "${if match_address" was not empty, but did not
+ contain an "@" character, Exim crashed. Now it writes a panic log message
+ and treats the condition as false.
Exim version 4.54
Index: match.c
===================================================================
RCS file: /home/cvs/exim/exim-src/src/match.c,v
retrieving revision 1.10
retrieving revision 1.11
diff -u -r1.10 -r1.11
--- match.c 12 Sep 2005 14:03:42 -0000 1.10
+++ match.c 15 Nov 2005 11:19:38 -0000 1.11
@@ -1,4 +1,4 @@
-/* $Cambridge: exim/exim-src/src/match.c,v 1.10 2005/09/12 14:03:42 ph10 Exp $ */
+/* $Cambridge: exim/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 @@
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. */
@@ -988,10 +1002,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