From: pdontthink Date: Sun, 1 Apr 2012 19:50:49 +0000 (+0000) Subject: Fall back to using LIST if NAMESPACE answer is malformed or otherwise problematic... X-Git-Url: https://vcs.fsf.org/?a=commitdiff_plain;h=ad2f0b546afcb978ee67ef25332cf4f12c363892;p=squirrelmail.git Fall back to using LIST if NAMESPACE answer is malformed or otherwise problematic. This still doesn't account for situations where the NAMESPACE or LIST answer can't be parsed correctly. git-svn-id: https://svn.code.sf.net/p/squirrelmail/code/trunk/squirrelmail@14302 7612ce4b-ef26-0410-bec9-ea0150e637f0 --- diff --git a/class/deliver/Deliver.class.php b/class/deliver/Deliver.class.php index 5fbba83b..32070807 100644 --- a/class/deliver/Deliver.class.php +++ b/class/deliver/Deliver.class.php @@ -545,7 +545,7 @@ class Deliver { $cnt = count($header); $hdr_s = ''; for ($i = 0 ; $i < $cnt ; $i++) { - $hdr_s .= $this->foldLine($header[$i], 78); + $hdr_s .= $this->foldLine($header[$i]); } $header = $hdr_s; $header .= $rn; /* One blank line to separate mimeheader and body-entity */ @@ -779,7 +779,7 @@ class Deliver { case 'From': $hdr_s .= $header[$i]; break; - default: $hdr_s .= $this->foldLine($header[$i], 78); break; + default: $hdr_s .= $this->foldLine($header[$i]); break; } } $header = $hdr_s; @@ -961,7 +961,7 @@ class Deliver { // if we found the beginning of an encoded word, // we want to break BEFORE the token // - if (preg_match('/^(=\?([^?]*)\?(Q|B)\?([^?]*)\?=)/Ui', + if (preg_match('/^(=\?([^?]*)\?(Q|B)\?([^?]*)\?=)/i', substr($header, $pos))) { $pos--; } @@ -982,7 +982,7 @@ class Deliver { // else if (strlen($header) > $hard_wrap && ($end_pos = strpos(substr($header, $hard_wrap), '?=')) !== FALSE - && preg_match('/(=\?([^?]*)\?(Q|B)\?([^?]*)\?=)$/Ui', + && preg_match('/(=\?([^?]*)\?(Q|B)\?([^?]*)\?=)$/i', substr($header, 0, $hard_wrap + $end_pos + 2), $matches)) { diff --git a/functions/abook_ldap_server.php b/functions/abook_ldap_server.php index 8d80dee3..0171685e 100644 --- a/functions/abook_ldap_server.php +++ b/functions/abook_ldap_server.php @@ -772,7 +772,7 @@ class abook_ldap_server extends addressbook_backend { function lookup($value, $field=SM_ABOOK_FIELD_NICKNAME) { - $attr = get_attr_name($field); + $attr = $this->get_attr_name($field); if ($attr == 'ERROR') { return $this->set_error(sprintf(_("Unknown field name: %s"), $field)); } diff --git a/functions/imap_general.php b/functions/imap_general.php index f39956d6..4341df2e 100755 --- a/functions/imap_general.php +++ b/functions/imap_general.php @@ -1064,7 +1064,7 @@ function sqimap_get_delimiter ($imap_stream = false) { /* Do some caching here */ if (!$sqimap_delimiter) { - if (sqimap_capability($imap_stream, 'NAMESPACE')) { + if (sqimap_capability($imap_stream, 'NAMESPACE') /* * According to something that I can't find, this is supposed to work on all systems * OS: This won't work in Courier IMAP. @@ -1074,23 +1074,21 @@ function sqimap_get_delimiter ($imap_stream = false) { * * TODO: remove this in favour of the information from sqimap_get_namespace() */ - $read = sqimap_run_command($imap_stream, 'NAMESPACE', true, $a, $b); - if (preg_match('/\* NAMESPACE +(\( *\(.+\) *\)|NIL) +(\( *\(.+\) *\)|NIL) +(\( *\(.+\) *\)|NIL)/i', $read[0], $data)) { - if (preg_match('/^\( *\((.*)\) *\)/', $data[1], $data2)) { - $pn = $data2[1]; - $pna = explode(')(', $pn); - $delnew = array(); - while (list($k, $v) = each($pna)) { - $lst = explode('"', $v); - if (isset($lst[3])) { - $delnew[$lst[1]] = $lst[3]; - } else { - $delnew[$lst[1]] = ''; - } - } - $sqimap_delimiter = array_shift($delnew); + && ($read = sqimap_run_command($imap_stream, 'NAMESPACE', true, $a, $b)) + && preg_match('/\* NAMESPACE +(\( *\(.+\) *\)|NIL) +(\( *\(.+\) *\)|NIL) +(\( *\(.+\) *\)|NIL)/i', $read[0], $data) + && preg_match('/^\( *\((.*)\) *\)/', $data[1], $data2)) { + $pn = $data2[1]; + $pna = explode(')(', $pn); + $delnew = array(); + while (list($k, $v) = each($pna)) { + $lst = explode('"', $v); + if (isset($lst[3])) { + $delnew[$lst[1]] = $lst[3]; + } else { + $delnew[$lst[1]] = ''; } } + $sqimap_delimiter = array_shift($delnew); } else { fputs ($imap_stream, ". LIST \"INBOX\" \"\"\r\n"); $read = sqimap_read_data($imap_stream, '.', true, $a, $b); diff --git a/functions/mime.php b/functions/mime.php index 33a87747..9d479dca 100644 --- a/functions/mime.php +++ b/functions/mime.php @@ -2011,7 +2011,12 @@ function sq_fix_url($attname, &$attvalue, $message, $id, $mailbox,$sQuote = '"') break; } } else { - if (!(isset($aUrl['path']) && $aUrl['path'] == $secremoveimg)) { + // anchors are OK + // FIXME: can there be abuse of anchors here? + // FIXME: stop anchors from opening in another window + if (!isset($aUrl['path']) && !empty($aUrl['fragment'])) { + } + else if (!isset($aUrl['path']) || $aUrl['path'] != $secremoveimg) { // parse_url did not lead to satisfying result $attvalue = $sQuote . SM_PATH . 'images/blank.png' . $sQuote; } diff --git a/functions/strings.php b/functions/strings.php index b8166754..3ea6ea3d 100644 --- a/functions/strings.php +++ b/functions/strings.php @@ -914,6 +914,48 @@ function sq_is8bit($string,$charset='') { * stores control symbols in those charsets. * Use preg_match instead of ereg in order to avoid problems * with mbstring overloading +NOTES: +NOTES: + 37 (base 8) = 31 (base 10) (LAST CONTROL CHAR) + 40 (base 8) = 32 (base 10) (FIRST PRINTABLE ASCII) + 176 (base 8) = 126 (base 10) (LAST PRINTABLE ASCII) + 177 (base 8) = 127 (base 10) (DEL) + 200 (base 8) = 128 (base 10) + 237 (base 8) = 159 (base 10) + 240 (base 8) = 160 (base 10) (FIRST EXTRA PRINTABLE) + 377 (base 8) = 255 (base 10) (LAST EXTRA PRINTABLE) + 400 (base 8) = 256 (base 10) + + Traditional ASCII 0 - 127 (octal 0 - 177) + Printable ASCII 32 - 126 (octal 40 - 176) + Additional Printables for ISO Latin 1 160 - 255 (octal 240 - 377) + + 240 (160) is the first character of the extra 7-bit printable characer + range, sometimes used as the no-break space, but the regular expression + ranges are broken up at 240 only because RH 7.2 PHP seemed to have + problems otherwise - this is a PHP/preg issue, NOT a charset issue + + So supposedly printable chars in an 8859 charset are 32-126 (octal 40-176) + and 160/161-255 (octal 240/241-377)) + + So checking for the range between the two makes sense (128-159 or octal 200-237) + (wait, no, to skip DEL too, it's 127-159 (octal 177-237)) + + But why not for 0-31 (octal 0-37) and DEL (127 or 177 octal)???? + (or do we need a new fxn that detects *printable* 7-bit chars?) + (if we do, note that some control characters are "printable", + notably the CR, LF and TAB characters) + + And why is 241-377 octal considered 8-bit for iso 8859??? Isn't it + the opposite for iso 8859???? aren't these 7 bit characters? + see http://www.cs.tut.fi/~jkorpela/chars.html#latin1 + Uh, well, anything more than 127 (octal 177) takes 8 bits to represent + but errrrr, these are simple non-multibyte characters, right? but + maybe this "is 8-bit" business is NOT the same as "is multibyte"???? + + That begs the question how this fxn is actually used - what's its purpose? + (is it being misused in some places?) + */ if (preg_match("/^iso-8859/i",$charset)) { $needle='/\240|[\241-\377]/'; diff --git a/templates/default/options_highlight_list.tpl b/templates/default/options_highlight_list.tpl index f077dc80..4bf28424 100644 --- a/templates/default/options_highlight_list.tpl +++ b/templates/default/options_highlight_list.tpl @@ -107,4 +107,4 @@ extract($t); - \ No newline at end of file +