X-Git-Url: https://vcs.fsf.org/?p=squirrelmail.git;a=blobdiff_plain;f=class%2Fmime%2FRfc822Header.class.php;h=d14a1b6b0442e14d7deb3227dc4df897d9c71c24;hp=1c7bd897032ede5ab11d3f474578cc06d0ebb781;hb=fc58ac3cc45bbf2a1de28adadb9f3bed8ccbe39e;hpb=da0135f62f730728c0c08c1ce5786c6332a366f2 diff --git a/class/mime/Rfc822Header.class.php b/class/mime/Rfc822Header.class.php index 1c7bd897..d14a1b6b 100644 --- a/class/mime/Rfc822Header.class.php +++ b/class/mime/Rfc822Header.class.php @@ -5,7 +5,7 @@ * * This file contains functions needed to handle headers in mime messages. * - * @copyright © 2003-2007 The SquirrelMail Project Team + * @copyright 2003-2015 The SquirrelMail Project Team * @license http://opensource.org/licenses/gpl-license.php GNU Public License * @version $Id$ * @package squirrelmail @@ -509,7 +509,7 @@ class Rfc822Header { $sComment = trim(implode(' ',$aComment)); $sPersonal .= $sComment; } - $oAddr =& new AddressStructure(); + $oAddr = new AddressStructure(); if ($sPersonal && substr($sPersonal,0,2) == '=?') { $oAddr->personal = encodeHeader($sPersonal); } else { @@ -642,7 +642,10 @@ class Rfc822Header { if ($ar) { return $aProcessedAddress; } else { - return $aProcessedAddress[0]; + if (isset($aProcessedAddress[0])) + return $aProcessedAddress[0]; + else + return ''; } } @@ -733,7 +736,7 @@ class Rfc822Header { $value = substr($value,strlen($charset)+1); /* FIXME: What's the status of charset decode with language information ???? * Maybe language information contains only ascii text and charset_decode() - * only runs htmlspecialchars() on it. If it contains 8bit information, you + * only runs sm_encode_html_special_chars() on it. If it contains 8bit information, you * get html encoded text in charset used by selected translation. */ $value = charset_decode($charset,$value); @@ -859,14 +862,20 @@ class Rfc822Header { * @param mixed $arr string or array of strings * @param string $separator * @param boolean $encoded (since 1.4.0) return encoded or plain text addresses + * @param boolean $unconditionally_quote (since 1.4.21/1.5.2) When TRUE, always + * quote the personal part, + * whether or not it is + * encoded, otherwise quoting + * is only added if the + * personal part is not encoded * @return string */ - function getAddr_s($arr, $separator = ', ', $encoded=false) { + function getAddr_s($arr, $separator = ', ', $encoded=false, $unconditionally_quote=FALSE) { $s = ''; if (is_array($arr)) { foreach($arr as $arg) { - if ($this->getAddr_s($arg, $separator, $encoded)) { + if ($this->getAddr_s($arg, $separator, $encoded, $unconditionally_quote)) { $s .= $separator; } } @@ -877,9 +886,9 @@ class Rfc822Header { foreach ($addr as $addr_o) { if (is_object($addr_o)) { if ($encoded) { - $s .= $addr_o->getEncodedAddress() . $separator; + $s .= $addr_o->getEncodedAddress($unconditionally_quote) . $separator; } else { - $s .= $addr_o->getAddress() . $separator; + $s .= $addr_o->getAddress(TRUE, FALSE, $unconditionally_quote) . $separator; } } } @@ -887,9 +896,9 @@ class Rfc822Header { } else { if (is_object($addr)) { if ($encoded) { - $s .= $addr->getEncodedAddress(); + $s .= $addr->getEncodedAddress($unconditionally_quote); } else { - $s .= $addr->getAddress(); + $s .= $addr->getAddress(TRUE, FALSE, $unconditionally_quote); } } } @@ -941,9 +950,50 @@ class Rfc822Header { /** //FIXME: This needs some documentation (inside the function too)! Don't code w/out comments! - * @param mixed $address array or string - * @param boolean $recurs - * @return mixed array, boolean + * Looking at the code years after it was written, + * this is my (Paul) best guess as to what this + * function does (note that docs previously claimed + * that this function returns boolean or an array, + * but it no longer appears to return an array - an + * integer instead): + * + * Inspects the TO and CC headers of the message + * represented by this object, looking for the + * address(es) given by $address + * + * If $address is a string: + * Serves as a test (returns boolean) as to + * whether or not the given address is found + * anywhere in the TO or CC headers + * + * If $address is an array: + * Looks through this list of addresses and + * returns the array index (an integer even + * if the array is given with keys of a + * different type) of the *last* matching + * $address found in this message's + * TO or CC headers, unless there is an exact + * match (meaning that the "personal + * information" in addition to the email + * address also matches), in which case that + * index (the first one found) is returned + * + * @param mixed $address Address(es) to search for in this + * message's TO and CC headers - please + * see above how the format of this + * argument affects the return value + * of this function + * @param boolean $recurs FOR INTERNAL USE ONLY + * + * @return mixed Boolean when $address is a scalar, + * indicating whether or not the address + * was found in the TO or CC headers. + * An integer when $address is an array, + * containing the index of the value in + * that array that was found in the TO + * or CC headers, or boolean FALSE if + * there were no matches at all + * * @since 1.3.2 */ function findAddress($address, $recurs = false) { @@ -996,7 +1046,7 @@ class Rfc822Header { } if ($recurs) { return array($results, false); - } elseif (count($result)) { + } elseif (count($results)) { return true; } else { return false;