From b7c1685b2dc98cad4acdbc04d5383b204b4d9c83 Mon Sep 17 00:00:00 2001 From: alecpl Date: Sun, 18 Jan 2009 10:58:32 +0000 Subject: #1484467: fix problems with backslash as imap hierarchy delimiter --- program/lib/imap.inc | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) (limited to 'program/lib/imap.inc') 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 - 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)); -- cgit v1.2.3