From 7045bb9c07d31b6de5f2578d9a9f9971fc39f1cf Mon Sep 17 00:00:00 2001
From: Aleksander Machniak <alec@alec.pl>
Date: Fri, 28 Jun 2013 04:15:28 -0400
Subject: [PATCH] Fix parsing one-line FETCH response, e.g. "* 1 FETCH (UID 9844 BODY[2.4] NIL)"

---
 program/lib/Roundcube/rcube_imap_generic.php |    6 ++++--
 1 files changed, 4 insertions(+), 2 deletions(-)

diff --git a/program/lib/Roundcube/rcube_imap_generic.php b/program/lib/Roundcube/rcube_imap_generic.php
index 2bf199c..1928c70 100644
--- a/program/lib/Roundcube/rcube_imap_generic.php
+++ b/program/lib/Roundcube/rcube_imap_generic.php
@@ -2506,11 +2506,13 @@
             // handle one line response
             if ($line[0] == '(' && substr($line, -1) == ')') {
                 // tokenize content inside brackets
+                // the content can be e.g.: (UID 9844 BODY[2.4] NIL)
                 $tokens = $this->tokenizeResponse(preg_replace('/(^\(|\)$)/', '', $line));
 
                 for ($i=0; $i<count($tokens); $i+=2) {
                     if (preg_match('/^(BODY|BINARY)/i', $tokens[$i])) {
-                        $result = $tokens[$i+1];
+                        $i += 2; // skip BODY|BINARY and part number
+                        $result = $tokens[$i];
                         $found  = true;
                         break;
                     }
@@ -3492,7 +3494,7 @@
                     break 2;
                 }
 
-                // excluded chars: SP, CTL, ), [, ]
+                // excluded chars: SP, CTL, ), [, ], DEL
                 if (preg_match('/^([^\x00-\x20\x29\x5B\x5D\x7F]+)/', $str, $m)) {
                     $result[] = $m[1] == 'NIL' ? NULL : $m[1];
                     $str = substr($str, strlen($m[1]));

--
Gitblit v1.9.1