summaryrefslogtreecommitdiff
path: root/program/lib/imap.inc
diff options
context:
space:
mode:
authoralecpl <alec@alec.pl>2009-01-18 10:58:32 +0000
committeralecpl <alec@alec.pl>2009-01-18 10:58:32 +0000
commitb7c1685b2dc98cad4acdbc04d5383b204b4d9c83 (patch)
tree589b7bccb6928f6478700ba8d301ea9ccd9f4195 /program/lib/imap.inc
parent12bc8b6fa2d4d85f08168acb2dcedcc186654489 (diff)
#1484467: fix problems with backslash as imap hierarchy delimiter
Diffstat (limited to 'program/lib/imap.inc')
-rw-r--r--program/lib/imap.inc13
1 files changed, 10 insertions, 3 deletions
diff --git a/program/lib/imap.inc b/program/lib/imap.inc
index 1390653ed..cca499b09 100644
--- a/program/lib/imap.inc
+++ b/program/lib/imap.inc
@@ -53,7 +53,7 @@
- Removed some debuggers (echo ...)
File altered by Aleksander Machniak <alec@alec.pl>
- trim(chop()) replaced by trim()
- - added iil_Escape() with support for " and \ in folder names
+ - added iil_Escape()/iil_UnEscape() with support for " and \ in folder names
- support \ character in username in iil_C_Login()
- fixed iil_MultLine(): use iil_ReadBytes() instead of iil_ReadLine()
- fixed iil_C_FetchStructureString() to handle many literal strings in response
@@ -338,6 +338,11 @@ function iil_Escape($string)
return strtr($string, array('"'=>'\\"', '\\' => '\\\\'));
}
+function iil_UnEscape($string)
+{
+ return strtr($string, array('\\"'=>'"', '\\\\' => '\\'));
+}
+
function iil_C_GetCapability(&$conn, $name)
{
if (in_array($name, $conn->capability)) {
@@ -497,6 +502,7 @@ function iil_C_NameSpace(&$conn) {
$line = iil_ReadLine($conn->fp, 1024);
if (iil_StartsWith($line, '* NAMESPACE')) {
$i = 0;
+ $line = iil_UnEscape($line);
$data = iil_ParseNamespace2(substr($line,11), $i, 0, 0);
}
} while (!iil_StartsWith($line, 'ns1', true));
@@ -2199,7 +2205,7 @@ function iil_C_GetHierarchyDelimiter(&$conn) {
$line=iil_ReadLine($fp, 500);
if ($line[0] == '*') {
$line = rtrim($line);
- $a=iil_ExplodeQuotedString(' ', $line);
+ $a=iil_ExplodeQuotedString(' ', iil_UnEscape($line));
if ($a[0] == '*') {
$delimiter = str_replace('"', '', $a[count($a)-2]);
}
@@ -2209,7 +2215,7 @@ function iil_C_GetHierarchyDelimiter(&$conn) {
if (strlen($delimiter)>0) {
return $delimiter;
}
-
+
//if that fails, try namespace extension
//try to fetch namespace data
iil_PutLine($conn->fp, "ns1 NAMESPACE");
@@ -2217,6 +2223,7 @@ function iil_C_GetHierarchyDelimiter(&$conn) {
$line = iil_ReadLine($conn->fp, 1024);
if (iil_StartsWith($line, '* NAMESPACE')) {
$i = 0;
+ $line = iil_UnEscape($line);
$data = iil_ParseNamespace2(substr($line,11), $i, 0, 0);
}
} while (!iil_StartsWith($line, 'ns1', true));