From 1465f80c5a25f598899cc7de631535c2e0abdf82 Mon Sep 17 00:00:00 2001 From: stekkel Date: Thu, 16 Jan 2003 12:48:03 +0000 Subject: [PATCH] * fix for e-mail addresses like: (personal name) now the personal name is no longer interpreted as comment but is stored as the personal name inside the address object if there is no other personal name supplied. in case of: "personal name1" (personal name2) personal name 1 is used and personal name 2 is treated as comment. * removed an eval call and replaced by something that doesn't need eval. git-svn-id: https://svn.code.sf.net/p/squirrelmail/code/trunk/squirrelmail@4425 7612ce4b-ef26-0410-bec9-ea0150e637f0 --- class/mime/Rfc822Header.class.php | 41 +++++++++++++++++++++---------- 1 file changed, 28 insertions(+), 13 deletions(-) diff --git a/class/mime/Rfc822Header.class.php b/class/mime/Rfc822Header.class.php index ff07b0cb..5bd745fe 100644 --- a/class/mime/Rfc822Header.class.php +++ b/class/mime/Rfc822Header.class.php @@ -53,10 +53,6 @@ class Rfc822Header { $field = substr($line, 0, $pos); if (!strstr($field,' ')) { /* valid field */ $value = trim(substr($line, $pos+1)); - if(!preg_match('/^X.*/i', $field) && - !preg_match('/^Subject/i', $field)) { - $value = $this->stripComments($value); - } $this->parseField($field, $value); } } @@ -68,7 +64,6 @@ class Rfc822Header { function stripComments($value) { $result = ''; - $cnt = strlen($value); for ($i = 0; $i < $cnt; ++$i) { switch ($value{$i}) { @@ -113,6 +108,7 @@ class Rfc822Header { $field = strtolower($field); switch($field) { case 'date': + $value = $this->stripComments($value); $d = strtr($value, array(' ' => ' ')); $d = explode(' ', $d); $this->date = getTimeStamp($d); @@ -142,53 +138,67 @@ class Rfc822Header { $this->in_reply_to = $value; break; case 'message-id': + $value = $this->stripComments($value); $this->message_id = $value; break; case 'references': + $value = $this->stripComments($value); $this->references = $value; break; case 'disposition-notification-to': + $value = $this->stripComments($value); $this->dnt = $this->parseAddress($value); break; case 'mime-version': + $value = $this->stripComments($value); $value = str_replace(' ', '', $value); $this->mime = ($value == '1.0' ? true : $this->mime); break; case 'content-type': + $value = $this->stripComments($value); $this->parseContentType($value); break; case 'content-disposition': + $value = $this->stripComments($value); $this->parseDisposition($value); break; case 'user-agent': case 'x-mailer': - $this->xmailer = $value; + $this->xmailer = $value; break; case 'x-priority': $this->priority = $value; break; case 'list-post': + $value = $this->stripComments($value); $this->mlist('post', $value); break; case 'list-reply': + $value = $this->stripComments($value); $this->mlist('reply', $value); break; case 'list-subscribe': + $value = $this->stripComments($value); $this->mlist('subscribe', $value); break; case 'list-unsubscribe': + $value = $this->stripComments($value); $this->mlist('unsubscribe', $value); break; case 'list-archive': + $value = $this->stripComments($value); $this->mlist('archive', $value); break; case 'list-owner': + $value = $this->stripComments($value); $this->mlist('owner', $value); break; case 'list-help': + $value = $this->stripComments($value); $this->mlist('help', $value); break; case 'list-id': + $value = $this->stripComments($value); $this->mlist('id', $value); break; default: @@ -217,6 +227,7 @@ class Rfc822Header { $j = strlen($address); $name = ''; $addr = ''; + $comment = ''; while ($pos < $j) { switch ($address{$pos}) { case '"': /* get the personal name */ @@ -242,12 +253,13 @@ class Rfc822Header { break; case '(': /* rip off comments */ $addr_start = $pos; - for (++$pos; ($pos < $j) && ($address{$pos} != ')'); ++$pos) { - $addr .= $address{$pos}; - } - $address_start = substr($address, 0, $addr_start); - $address_end = substr($address, $pos + 1); - $address = $address_start . $address_end; + $pos = strpos($address,')'); + if ($pos !== false) { + $comment = substr($address, $addr_start+1,($pos-$addr_start-1)); + $address_start = substr($address, 0, $addr_start); + $address_end = substr($address, $pos + 1); + $address = $address_start . $address_end; + } $j = strlen($address); $pos = $addr_start + 1; break; @@ -260,6 +272,7 @@ class Rfc822Header { $at = strpos($addr, '@'); $addr_structure = new AddressStructure(); + if (!$name && $comment) $name = $comment; $addr_structure->personal = $name; $addr_structure->group = $group; if ($at) { @@ -319,6 +332,7 @@ class Rfc822Header { } else if ($name == '') { $name = trim(substr($address, 0, $addr_start)); } + if (!$name && $comment) $name = $comment; $at = strpos($addr, '@'); $addr_structure = new AddressStructure(); $addr_structure->group = $group; @@ -476,7 +490,7 @@ class Rfc822Header { $arr = $this->getAddr_a($argument, $excl_arr, $arr); } } else { - eval('$addr = $this->' . $arg . ';') ; + $addr = $this->{$arg}; if (is_array($addr)) { foreach ($addr as $next_addr) { if (is_object($next_addr)) { @@ -561,6 +575,7 @@ class Rfc822Header { return false; } } + //exit; return $result; } -- 2.25.1