summaryrefslogtreecommitdiff
path: root/program
diff options
context:
space:
mode:
authorAleksander Machniak <alec@alec.pl>2013-05-05 16:38:58 +0200
committerAleksander Machniak <alec@alec.pl>2013-05-05 16:39:29 +0200
commit3a0dc87856cc0c2a47649e58e930621506e64cbf (patch)
tree40ac9dbcd6d87a31e2b50329a8ff6307dc67be03 /program
parent0b0caee40b6c68263a349b54bc989ceb53af1b63 (diff)
Fix backslash character handling on vCard import (#1489085)
Diffstat (limited to 'program')
-rw-r--r--program/lib/Roundcube/rcube_vcard.php23
1 files changed, 22 insertions, 1 deletions
diff --git a/program/lib/Roundcube/rcube_vcard.php b/program/lib/Roundcube/rcube_vcard.php
index 54bb9521d..cc3a35850 100644
--- a/program/lib/Roundcube/rcube_vcard.php
+++ b/program/lib/Roundcube/rcube_vcard.php
@@ -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;
}
/**