[exim-cvs] Fix expansions for RFC 822 addresses having comme…

Kezdőlap
Üzenet törlése
Válasz az üzenetre
Szerző: Exim Git Commits Mailing List
Dátum:  
Címzett: exim-cvs
Tárgy: [exim-cvs] Fix expansions for RFC 822 addresses having comments in local-part and/or domain. Bug 2375
Gitweb: https://git.exim.org/exim.git/commitdiff/e2ff8e24f41caca3623228b1ec66a3f3961ecad6
Commit:     e2ff8e24f41caca3623228b1ec66a3f3961ecad6
Parent:     fc243e944ec00b59b75f41d07494116f925d58b4
Author:     Jasen Betts <jasen@???>
AuthorDate: Mon Feb 18 13:52:16 2019 +0000
Committer:  Jeremy Harris <jgh146exb@???>
CommitDate: Mon Feb 18 13:57:17 2019 +0000


    Fix expansions for RFC 822 addresses having comments in local-part and/or domain.  Bug 2375
---
 doc/doc-txt/ChangeLog        |  3 +++
 src/src/expand.c             | 19 +++++++------------
 test/scripts/0000-Basic/0002 |  7 +++++++
 test/stdout/0002             |  7 +++++++
 4 files changed, 24 insertions(+), 12 deletions(-)


diff --git a/doc/doc-txt/ChangeLog b/doc/doc-txt/ChangeLog
index 6a9aae3..6b60cf0 100644
--- a/doc/doc-txt/ChangeLog
+++ b/doc/doc-txt/ChangeLog
@@ -32,6 +32,9 @@ JH/07 GnuTLS: Our use of late (post-handshake) certificate verification, under
       TLS connection attempt, so that the normal retry-in-clear can work (if
       suitably configured).


+JB/01 Big 2375: fix expansions of 822 addresses having comments in local-part
+      and/or domain.  Found and fixed by Jason Betts.
+


 Exim version 4.92
 -----------------
diff --git a/src/src/expand.c b/src/src/expand.c
index e3615cd..6e0ba93 100644
--- a/src/src/expand.c
+++ b/src/src/expand.c
@@ -7103,16 +7103,11 @@ while (*s != 0)
         uschar * t = parse_extract_address(sub, &error, &start, &end, &domain,
           FALSE);
         if (t)
-          if (c != EOP_DOMAIN)
-            {
-            if (c == EOP_LOCAL_PART && domain != 0) end = start + domain - 1;
-            yield = string_catn(yield, sub+start, end-start);
-            }
-          else if (domain != 0)
-            {
-            domain += start;
-            yield = string_catn(yield, sub+domain, end-domain);
-            }
+      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);
         continue;
         }


@@ -7136,7 +7131,7 @@ while (*s != 0)

         for (;;)
           {
-          uschar *p = parse_find_address_end(sub, FALSE);
+          uschar * p = parse_find_address_end(sub, FALSE);
           uschar saveend = *p;
           *p = '\0';
           address = parse_extract_address(sub, &error, &start, &end, &domain,
@@ -7149,7 +7144,7 @@ while (*s != 0)
           list, add in a space if the new address begins with the separator
           character, or is an empty string. */


-          if (address != NULL)
+          if (address)
             {
             if (yield->ptr != save_ptr && address[0] == *outsep)
               yield = string_catn(yield, US" ", 1);
diff --git a/test/scripts/0000-Basic/0002 b/test/scripts/0000-Basic/0002
index 65ad690..c738b09 100644
--- a/test/scripts/0000-Basic/0002
+++ b/test/scripts/0000-Basic/0002
@@ -123,8 +123,14 @@ acl: ${reduce {1:2:3:4} {} {$value ${acl {a_ret}{$item}}}}


addrss: ${address:local-part@???}
addrss: ${address:Exim Person <local-part@???> (that's me)}
+addrss: ${address:Exim Person <local-part(comment)@dom.ain> (that's me)}
+addrss: ${address:Exim Person <local-part@???(comment)> (that's me)}
+addrss: ${address:Exim Person <local-part(comment)@dom.ain(comment2)> (that's me)}
+addrss: ${address:Exim Person <local-part.(comment)dot-atom@???(comment2)> (that's me)}
+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)}

addresses: ${addresses:>' 'abc@xyz, 'pqr@xyz}
addresses: ${addresses:Exim Person <local-part@???> (that's me)}
@@ -244,6 +250,7 @@ lc/uc: ${lc:The Quick} ${uc: Brown Fox}
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)}
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 f5a9728..3800fd3 100644
--- a/test/stdout/0002
+++ b/test/stdout/0002
@@ -115,6 +115,12 @@
>
> addrss: local-part@???
> addrss: local-part@???

+> addrss: local-part@???
+> addrss: local-part@???
+> addrss: local-part@???
+> addrss: local-part.dot-atom@???
+> addrss: local-part@???
+> domain: dom.ain
> domain: dom.ain
> domain: dom.ain
>

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

> length: The quick abc
> lclpt: local-part
> lclpt: local-part

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