Fix backslash character handling on vCard import (#1489085)

pull/72/merge
Aleksander Machniak 11 years ago
parent 0b0caee40b
commit 3a0dc87856

@ -1,6 +1,7 @@
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()

@ -784,9 +784,30 @@ class rcube_vcard
}
return $result;
}
$s = strtr($s, $rep2);
}
// 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 strtr($s, array("\r" => '', '\\\\' => '\\', '\n' => "\n", '\N' => "\n", '\,' => ',', '\;' => ';'));
return $s;
}
/**

@ -65,6 +65,20 @@ class Framework_VCard extends PHPUnit_Framework_TestCase
$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'));

Loading…
Cancel
Save