thomascube
2008-03-21 0c6f4b88648879cf12342d16c83bdd0d3a11672f
Better patch to correctly quote email recipient strings (from #1484191)

3 files modified
13 ■■■■■ changed files
program/include/main.inc 5 ●●●● patch | view | raw | blame | history
program/include/rcube_imap.inc 4 ●●● patch | view | raw | blame | history
program/steps/mail/compose.inc 4 ●●●● patch | view | raw | blame | history
program/include/main.inc
@@ -1567,7 +1567,10 @@
function format_email_recipient($email, $name='')
  {
  if ($name && $name != $email)
    return sprintf('%s <%s>', strpos($name, ",") ? '"'.$name.'"' : $name, $email);
    {
    // Special chars as defined by RFC 822 need to in quoted string (or escaped).
    return sprintf('%s <%s>', preg_match('/[\(\)\<\>\\\.\[\]@,;:"]/', $name) ? '"'.addcslashes($name, '"').'"' : $name, $email);
    }
  else
    return $email;
  }
program/include/rcube_imap.inc
@@ -2272,6 +2272,8 @@
    {
    $a = $this->_parse_address_list($input, $decode);
    $out = array();
    // Special chars as defined by RFC 822 need to in quoted string (or escaped).
    $special_chars = '[\(\)\<\>\\\.\[\]@,;:"]';
    
    if (!is_array($a))
      return $out;
@@ -2285,7 +2287,7 @@
      $address = $val['address'];
      $name = preg_replace(array('/^[\'"]/', '/[\'"]$/'), '', trim($val['name']));
      if ($name && $address && $name != $address)
        $string = sprintf('%s <%s>', preg_match('/[,;<>]/', $name) ? '"'.addcslashes($name, '"').'"' : $name, $address);
        $string = sprintf('%s <%s>', preg_match("/$special_chars/", $name) ? '"'.addcslashes($name, '"').'"' : $name, $address);
      else if ($address)
        $string = $address;
      else if ($name)
program/steps/mail/compose.inc
@@ -893,7 +893,7 @@
  {
  while ($sql_arr = $result->iterate())
    if ($sql_arr['email'])
      $a_contacts[] = format_email_recipient($sql_arr['email'], JQ($sql_arr['name']));
      $a_contacts[] = format_email_recipient($sql_arr['email'], $sql_arr['name']);
  }
if (isset($CONFIG['ldap_public']))
  {
@@ -918,7 +918,7 @@
         $email = $results->records[$i]['email']; 
         $name = $results->records[$i]['name']; 
          
         $a_contacts[] = format_email_recipient($email, JQ($name));
         $a_contacts[] = format_email_recipient($email, $name);
         } 
       }
    $LDAP->close();