summaryrefslogtreecommitdiff
path: root/program/include/rcube_mime_struct.php
diff options
context:
space:
mode:
authoralecpl <alec@alec.pl>2011-07-27 18:21:49 +0000
committeralecpl <alec@alec.pl>2011-07-27 18:21:49 +0000
commit733ed0a20a025c2534ab9cbfb5880ed44ec2472f (patch)
treedb6354641f771510607d5077ba1d6c0cc70a11c5 /program/include/rcube_mime_struct.php
parent341d9661c7b10ebf5e888d1a7eeb838bab59f7de (diff)
- Use rcube_imap_generic::tokenizeResponse() for parsing BODYSTRUCTURE, fixes #1488007
Diffstat (limited to 'program/include/rcube_mime_struct.php')
-rw-r--r--program/include/rcube_mime_struct.php79
1 files changed, 5 insertions, 74 deletions
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;
- }
-
-
}