Account for servers that send extra unsolicited FETCH responses (such as when flags...
[squirrelmail.git] / functions / imap_general.php
index 4341df2e5937a68ea4184db7f0bc4a28d505b10e..017025ed749e2cd9ebe3c203a2e03d8aa4f5de03 100755 (executable)
@@ -109,6 +109,21 @@ function sqimap_run_command ($imap_stream, $query, $handle_errors, &$response,
         $message  = $message[$tag];
 
         if (!empty($read[$tag])) {
+            /* sqimap_read_data should be called for one response
+               but since it just calls sqimap_retrieve_imap_response
+               which handles multiple responses we need to check for
+               that and merge the $read[$tag] array IF they are
+               separated and IF it was a FETCH response. */
+
+            if (isset($read[$tag][1]) && is_array($read[$tag][1]) && isset($read[$tag][1][0])
+                && preg_match('/^\* \d+ FETCH/', $read[$tag][1][0])) {
+                $result = array();
+                foreach($read[$tag] as $index => $value) {
+                    $result = array_merge($result, $read[$tag]["$index"]);
+                }
+                return $result;
+            }
+
             return $read[$tag][0];
         } else {
             return $read[$tag];