[exim-cvs] Fix ${domain:} for a bare local-part input. Bug …

Top Page
Delete this message
Reply to this message
Author: Exim Git Commits Mailing List
Date:  
To: exim-cvs
Subject: [exim-cvs] Fix ${domain:} for a bare local-part input. Bug 2375
Gitweb: https://git.exim.org/exim.git/commitdiff/c5b0340697326238b0e2afd9d341185077d60d35
Commit:     c5b0340697326238b0e2afd9d341185077d60d35
Parent:     ad1584d5972f44e835d086bbcfdf12af49da8244
Author:     Jeremy Harris <jgh146exb@???>
AuthorDate: Tue Aug 27 17:44:52 2019 +0100
Committer:  Jeremy Harris <jgh146exb@???>
CommitDate: Tue Aug 27 17:44:52 2019 +0100


    Fix ${domain:} for a bare local-part input.  Bug 2375


    Broken-by: e2ff8e24f4
---
 src/src/expand.c             | 11 ++++++-----
 test/scripts/0000-Basic/0002 |  2 ++
 test/stdout/0002             |  2 ++
 3 files changed, 10 insertions(+), 5 deletions(-)


diff --git a/src/src/expand.c b/src/src/expand.c
index 205ac33..f38d7a4 100644
--- a/src/src/expand.c
+++ b/src/src/expand.c
@@ -7206,11 +7206,12 @@ while (*s != 0)
         uschar * t = parse_extract_address(sub, &error, &start, &end, &domain,
           FALSE);
         if (t)
-      yield = c == EOP_DOMAIN
-        ? string_cat(yield, t + domain)
-        : c == EOP_LOCAL_PART && domain > 0
-        ? string_catn(yield, t, domain - 1 )
-        : string_cat(yield, t);
+      if (c != EOP_DOMAIN)
+        yield = c == EOP_LOCAL_PART && domain > 0
+          ? string_catn(yield, t, domain - 1)
+          : string_cat(yield, t);
+      else if (domain > 0)
+        yield = string_cat(yield, t + domain);
         continue;
         }


diff --git a/test/scripts/0000-Basic/0002 b/test/scripts/0000-Basic/0002
index 8e654ac..2bf8f16 100644
--- a/test/scripts/0000-Basic/0002
+++ b/test/scripts/0000-Basic/0002
@@ -169,6 +169,7 @@ addrss: ${address:Exim Person <(comment)local-part@???(comment2)> (that's me
domain: ${domain:local-part@???}
domain: ${domain:Exim Person <local-part@???> (that's me)}
domain: ${domain:Exim Person <local-part(foo)@(bar)dom.ain> (that's me)}
+domain: ${domain:a.b.c}

addresses: ${addresses:>' 'abc@xyz, 'pqr@xyz}
addresses: ${addresses:Exim Person <local-part@???> (that's me)}
@@ -255,6 +256,7 @@ length: ${length_10:The quick brown fox} ${l_10:abc}
lclpt: ${local_part:local-part@???}
lclpt: ${local_part:Exim Person <local-part@???> (that's me)}
lclpt: ${local_part:Exim Person <local(comment).part@dom.(comment2)ain> (that's me)}
+lclpt: ${local_part:a.b.c}
quote: ${quote:aZ09_.-Q} ${quote:ab*cd} ${quote:ab\cd"ef}
quote: ${quote:nl(\n)}
quote: ${quote:cr(\r)}
diff --git a/test/stdout/0002 b/test/stdout/0002
index 6319fdc..01e96fe 100644
--- a/test/stdout/0002
+++ b/test/stdout/0002
@@ -161,6 +161,7 @@
> domain: dom.ain
> domain: dom.ain
> domain: dom.ain

+> domain:
>
> addresses: ''abc@xyz' ''pqr@xyz
> addresses: local-part@???

@@ -237,6 +238,7 @@ newline    tab\134backslash ~tilde\177DEL\200\201.

> lclpt: local-part
> lclpt: local-part
> lclpt: local.part

+> lclpt: a.b.c
> quote: aZ09_.-Q "ab*cd" "abcd\"ef"
> quote: "nl(\n)"
> quote: "cr(\r)"