Fix backslash character handling on vCard import (#1489085)
| | |
| | | CHANGELOG Roundcube Webmail |
| | | =========================== |
| | | |
| | | - Fix backslash character handling on vCard import (#1489085) |
| | | - Fix csv import from Thunderbird with French localization (#1489059) |
| | | - Fix messages list focus issue in Opera and Webkit (#1489058) |
| | | - Make PHP code eval() free, use create_function() |
| | |
| | | } |
| | | return $result; |
| | | } |
| | | |
| | | $s = strtr($s, $rep2); |
| | | } |
| | | |
| | | return strtr($s, array("\r" => '', '\\\\' => '\\', '\n' => "\n", '\N' => "\n", '\,' => ',', '\;' => ';')); |
| | | // some implementations (GMail) use non-standard backslash before colon (#1489085) |
| | | // we will handle properly any backslashed character - removing dummy backslahes |
| | | // return strtr($s, array("\r" => '', '\\\\' => '\\', '\n' => "\n", '\N' => "\n", '\,' => ',', '\;' => ';')); |
| | | |
| | | $s = str_replace("\r", '', $s); |
| | | $pos = 0; |
| | | |
| | | while (($pos = strpos($s, '\\', $pos)) !== false) { |
| | | $next = substr($s, $pos + 1, 1); |
| | | if ($next == 'n' || $next == 'N') { |
| | | $s = substr_replace($s, "\n", $pos, 2); |
| | | } |
| | | else { |
| | | $s = substr_replace($s, '', $pos, 1); |
| | | } |
| | | |
| | | $pos += 1; |
| | | } |
| | | |
| | | return $s; |
| | | } |
| | | |
| | | /** |
| | |
| | | $this->assertEquals("prefix", $vcard['prefix'], "Decode backslash character"); |
| | | } |
| | | |
| | | /** |
| | | * Backslash parsing test (#1489085) |
| | | */ |
| | | function test_parse_five() |
| | | { |
| | | $vcard = "BEGIN:VCARD\nVERSION:3.0\nN:last\\\\\\a;fir\\nst\nURL:http\\://domain.tld\nEND:VCARD"; |
| | | $vcard = new rcube_vcard($vcard, null); |
| | | $vcard = $vcard->get_assoc(); |
| | | |
| | | $this->assertEquals("last\\a", $vcard['surname'], "Decode dummy backslash character"); |
| | | $this->assertEquals("fir\nst", $vcard['firstname'], "Decode backslash character"); |
| | | $this->assertEquals("http://domain.tld", $vcard['website:other'][0], "Decode dummy backslash character"); |
| | | } |
| | | |
| | | function test_import() |
| | | { |
| | | $input = file_get_contents($this->_srcpath('apple.vcf')); |