From: Philip Hazel Date: Tue, 31 Oct 2006 14:26:34 +0000 (+0000) Subject: Add warning about missing colon to invalid expansion when it involved X-Git-Tag: exim-4_64~40 X-Git-Url: https://git.exim.org/exim.git/commitdiff_plain/0d85fa3fd0f9f036b4ca269a15fce0f0c5348ffe Add warning about missing colon to invalid expansion when it involved ${if def:h_xxx (overlooked previously). --- diff --git a/doc/doc-txt/ChangeLog b/doc/doc-txt/ChangeLog index 5f8d427d6..b3ac9316c 100644 --- a/doc/doc-txt/ChangeLog +++ b/doc/doc-txt/ChangeLog @@ -1,4 +1,4 @@ -$Cambridge: exim/doc/doc-txt/ChangeLog,v 1.421 2006/10/31 12:16:26 ph10 Exp $ +$Cambridge: exim/doc/doc-txt/ChangeLog,v 1.422 2006/10/31 14:26:34 ph10 Exp $ Change log file for Exim from version 4.21 ------------------------------------------- @@ -222,6 +222,10 @@ PH/31 Installed Andrew Findlay's patch to close the writing end of the socket PH/32 Added some extra debug output when updating a wait-xxx database. +PH/33 The hint "could be header name not terminated by colon", which has been + given for certain expansion errors for a long time, was not being given + for the ${if def:h_colon_omitted{... case. + Exim version 4.63 ----------------- diff --git a/src/src/expand.c b/src/src/expand.c index 4943bcb5c..b91f0316a 100644 --- a/src/src/expand.c +++ b/src/src/expand.c @@ -1,4 +1,4 @@ -/* $Cambridge: exim/src/src/expand.c,v 1.67 2006/10/31 11:14:18 ph10 Exp $ */ +/* $Cambridge: exim/src/src/expand.c,v 1.68 2006/10/31 14:26:34 ph10 Exp $ */ /************************************************* * Exim - an Internet mail transport agent * @@ -1689,7 +1689,9 @@ switch(cond_type) s = read_name(name, 256, s+1, US"_"); - /* Test for a header's existence */ + /* Test for a header's existence. If the name contains a closing brace + character, this may be a user error where the terminating colon has been + omitted. Set a flag to adjust a subsequent error message in this case. */ if (Ustrncmp(name, "h_", 2) == 0 || Ustrncmp(name, "rh_", 3) == 0 || @@ -1699,6 +1701,7 @@ switch(cond_type) Ustrncmp(name, "bheader_", 8) == 0) { s = read_header_name(name, 256, s); + if (Ustrchr(name, '}') != NULL) malformed_header = TRUE; if (yield != NULL) *yield = (find_header(name, TRUE, NULL, FALSE, NULL) != NULL) == testfor; } @@ -2973,7 +2976,7 @@ while (*s != 0) value = find_header(name, FALSE, &newsize, want_raw, charset); /* If we didn't find the header, and the header contains a closing brace - characters, this may be a user error where the terminating colon + character, this may be a user error where the terminating colon has been omitted. Set a flag to adjust the error message in this case. But there is no error here - nothing gets inserted. */ diff --git a/test/scripts/0000-Basic/0002 b/test/scripts/0000-Basic/0002 index 19e1e856a..c9757718b 100644 --- a/test/scripts/0000-Basic/0002 +++ b/test/scripts/0000-Basic/0002 @@ -578,6 +578,8 @@ ${if and {xyz}{a}{b}} ${if and {{xya}}{a}{b}} ${if and {{${lookup{x}lsearch{/a/b}}}}{a}{b}} ${if eq {$h_xyz}{1}{y}{n}} +${if eq {$h_xyz:}{1}{y}{n} +${if def:h_xyz}{y}{n}} ${if or {eq {}{}{yes}{no}} ${if or {{eq {}{}{yes}{no}} ${if or {{eq {}{}}{yes}{no}} diff --git a/test/stdout/0002 b/test/stdout/0002 index 96d4047ac..188a9752f 100644 --- a/test/stdout/0002 +++ b/test/stdout/0002 @@ -555,6 +555,8 @@ xyz > Failed: unknown condition "xya" inside "and{...}" condition > Failed: condition name expected, but found "${lookup{x}lsear" inside "and{...}" condition > Failed: missing } at end of string - could be header name not terminated by colon +> Failed: missing or misplaced { or } +> Failed: missing or misplaced { or } - could be header name not terminated by colon > Failed: each subcondition inside an "or{...}" condition must be in its own {} > Failed: missing } at end of condition inside "or" group > Failed: unknown condition "yes" inside "or{...}" condition