Fall back to using LIST if NAMESPACE answer is malformed or otherwise problematic...
authorpdontthink <pdontthink@7612ce4b-ef26-0410-bec9-ea0150e637f0>
Sun, 1 Apr 2012 19:50:49 +0000 (19:50 +0000)
committerpdontthink <pdontthink@7612ce4b-ef26-0410-bec9-ea0150e637f0>
Sun, 1 Apr 2012 19:50:49 +0000 (19:50 +0000)
git-svn-id: https://svn.code.sf.net/p/squirrelmail/code/trunk/squirrelmail@14302 7612ce4b-ef26-0410-bec9-ea0150e637f0

class/deliver/Deliver.class.php
functions/abook_ldap_server.php
functions/imap_general.php
functions/mime.php
functions/strings.php
templates/default/options_highlight_list.tpl

index 5fbba83..3207080 100644 (file)
@@ -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)) {
 
index 8d80dee..0171685 100644 (file)
@@ -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));
         }
index f39956d..4341df2 100755 (executable)
@@ -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);
index 33a8774..9d479dc 100644 (file)
@@ -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;
                 }
index b816675..3ea6ea3 100644 (file)
@@ -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]/';
index f077dc8..4bf2842 100644 (file)
@@ -107,4 +107,4 @@ extract($t);
   </td>
  </tr>
 </table>
-</div>
\ No newline at end of file
+</div>