Changeset 435c315 in github


Ignore:
Timestamp:
Oct 20, 2010 4:58:21 AM (3 years ago)
Author:
alecpl <alec@…>
Branches:
master, HEAD, courier-fix, dev-browser-capabilities, pdo, release-0.6, release-0.7, release-0.8
Children:
8bac7e9
Parents:
13326b7
Message:
  • Fix decoding of e-mail address strings in message headers (#1487068)
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • CHANGELOG

    r8b6eff6 r435c315  
    3636- Add ANNOTATEMORE extension support into IMAP classes (draft-daboo-imap-annotatemore) 
    3737- Add METADATA extension support into IMAP classes (RFC5464) 
     38- Fix decoding of e-mail address strings in message headers (#1487068) 
    3839 
    3940RELEASE 0.4.2 
  • program/include/rcube_imap.php

    ra2e8cb36 r435c315  
    40014001            $j++; 
    40024002            $address = trim($val['address']); 
    4003             $name = trim($val['name']); 
    4004  
    4005             if ($name && preg_match('/^[\'"]/', $name) && preg_match('/[\'"]$/', $name)) 
    4006                 $name = trim($name, '\'"'); 
     4003            $name    = trim($val['name']); 
    40074004 
    40084005            if ($name && $address && $name != $address) 
     
    44204417 
    44214418        foreach ($a as $key => $val) { 
    4422             $val = preg_replace("/([\"\w])</", "$1 <", $val); 
    4423             $sub_a = rcube_explode_quoted_string(' ', $decode ? $this->decode_header($val) : $val); 
    4424             $result[$key]['name'] = ''; 
    4425  
    4426             foreach ($sub_a as $k => $v) { 
    4427                     // use angle brackets in regexp to not handle names with @ sign 
    4428                 if (preg_match('/^<\S+@\S+>$/', $v)) 
    4429                     $result[$key]['address'] = trim($v, '<>'); 
    4430                 else 
    4431                     $result[$key]['name'] .= (empty($result[$key]['name'])?'':' ').str_replace("\"",'',stripslashes($v)); 
    4432             } 
    4433  
    4434 //          if (empty($result[$key]['name'])) 
    4435 //              $result[$key]['name'] = $result[$key]['address']; 
    4436             if (empty($result[$key]['address'])) 
    4437                 $result[$key]['address'] = $result[$key]['name']; 
     4419            $name    = ''; 
     4420            $address = ''; 
     4421            $val     = trim($val); 
     4422 
     4423            if (preg_match('/(.*)<(\S+@\S+)>$/', $val, $m)) { 
     4424                $address = $m[2]; 
     4425                $name    = trim($m[1]); 
     4426            } 
     4427            else if (preg_match('/^(\S+@\S+)$/', $val, $m)) { 
     4428                $address = $m[1]; 
     4429                $name    = ''; 
     4430            } 
     4431            else { 
     4432                $name = $val; 
     4433            } 
     4434 
     4435            // dequote and/or decode name 
     4436            if ($name) { 
     4437                if ($name[0] == '"') { 
     4438                    $name = substr($name, 1, -1); 
     4439                    $name = stripslashes($name); 
     4440                } 
     4441                else if ($decode) { 
     4442                    $name = $this->decode_header($name); 
     4443                } 
     4444            } 
     4445 
     4446            if (!$address && $name) { 
     4447                $address = $name; 
     4448            } 
     4449 
     4450            if ($address) { 
     4451                $result[$key] = array('name' => $name, 'address' => $address); 
     4452            } 
    44384453        } 
    44394454 
Note: See TracChangeset for help on using the changeset viewer.