From 733ed0a20a025c2534ab9cbfb5880ed44ec2472f Mon Sep 17 00:00:00 2001 From: alecpl Date: Wed, 27 Jul 2011 18:21:49 +0000 Subject: - Use rcube_imap_generic::tokenizeResponse() for parsing BODYSTRUCTURE, fixes #1488007 --- program/include/rcube_imap.php | 8 ++-- program/include/rcube_mime_struct.php | 79 +++-------------------------------- 2 files changed, 9 insertions(+), 78 deletions(-) (limited to 'program') diff --git a/program/include/rcube_imap.php b/program/include/rcube_imap.php index cfea18928..f809288eb 100644 --- a/program/include/rcube_imap.php +++ b/program/include/rcube_imap.php @@ -2163,7 +2163,7 @@ class rcube_imap if (strtolower($part[$i][0]) == 'message' && strtolower($part[$i][1]) == 'rfc822') { $mime_part_headers[] = $tmp_part_id; } - else if (in_array('name', (array)$part[$i][2]) && (empty($part[$i][3]) || $part[$i][3]=='NIL')) { + else if (in_array('name', (array)$part[$i][2]) && empty($part[$i][3])) { $mime_part_headers[] = $tmp_part_id; } } @@ -2231,13 +2231,13 @@ class rcube_imap } // read content encoding - if (!empty($part[5]) && $part[5]!='NIL') { + if (!empty($part[5])) { $struct->encoding = strtolower($part[5]); $struct->headers['content-transfer-encoding'] = $struct->encoding; } // get part size - if (!empty($part[6]) && $part[6]!='NIL') + if (!empty($part[6])) $struct->size = intval($part[6]); // read part disposition @@ -2264,7 +2264,7 @@ class rcube_imap } // get part ID - if (!empty($part[3]) && $part[3]!='NIL') { + if (!empty($part[3])) { $struct->content_id = $part[3]; $struct->headers['content-id'] = $part[3]; diff --git a/program/include/rcube_mime_struct.php b/program/include/rcube_mime_struct.php index 3a79aca62..c64942566 100644 --- a/program/include/rcube_mime_struct.php +++ b/program/include/rcube_mime_struct.php @@ -6,7 +6,7 @@ | program/include/rcube_mime_struct.php | | | | This file is part of the Roundcube Webmail client | - | Copyright (C) 2005-2010, The Roundcube Dev Team | + | Copyright (C) 2005-2011, The Roundcube Dev Team | | Licensed under the GNU GPL | | | | PURPOSE: | @@ -48,7 +48,7 @@ class rcube_mime_struct $line = substr($str, 1, strlen($str) - 2); $line = str_replace(')(', ') (', $line); - $struct = self::parseBSString($line); + $struct = rcube_imap_generic::tokenizeResponse($line); if (!is_array($struct[0]) && (strcasecmp($struct[0], 'message') == 0) && (strcasecmp($struct[1], 'rfc822') == 0)) { $struct = array($struct); @@ -78,7 +78,7 @@ class rcube_mime_struct else if ($part_a[0]) return $part_a[0]; } - + return 'other'; } @@ -89,7 +89,7 @@ class rcube_mime_struct if (!is_array($part_a[0])) return $part_a[5]; } - + return ''; } @@ -108,7 +108,7 @@ class rcube_mime_struct } } } - + return ''; } @@ -142,73 +142,4 @@ class rcube_mime_struct } } - private function closingParenPos($str, $start) - { - $level = 0; - $len = strlen($str); - $in_quote = 0; - - for ($i=$start; $i<$len; $i++) { - if ($str[$i] == '"' && $str[$i-1] != "\\") { - $in_quote = ($in_quote + 1) % 2; - } - if (!$in_quote) { - if ($str[$i] == '(') - $level++; - else if (($level > 0) && ($str[$i] == ')')) - $level--; - else if (($level == 0) && ($str[$i] == ')')) - return $i; - } - } - } - - /* - * Parses IMAP's BODYSTRUCTURE string into array - */ - private function parseBSString($str) - { - $id = 0; - $a = array(); - $len = strlen($str); - $in_quote = 0; - - for ($i=0; $i<$len; $i++) { - if ($str[$i] == '"') { - $in_quote = ($in_quote + 1) % 2; - } else if (!$in_quote) { - // space means new element - if ($str[$i] == ' ') { - $id++; - // skip additional spaces - while ($str[$i+1] == ' ') - $i++; - // new part - } else if ($str[$i] == '(') { - $i++; - $endPos = self::closingParenPos($str, $i); - $partLen = $endPos - $i; - if ($partLen < 0) - break; - $part = substr($str, $i, $partLen); - $a[$id] = self::parseBSString($part); // send part string - $i = $endPos; - } else - $a[$id] .= $str[$i]; //add to current element in array - } else if ($in_quote) { - if ($str[$i] == "\\") { - $i++; // escape backslashes - if ($str[$i] == '"' || $str[$i] == "\\") - $a[$id] .= $str[$i]; - } - else - $a[$id] .= $str[$i]; //add to current element in array - } - } - - reset($a); - return $a; - } - - } -- cgit v1.2.3