From ae579cee860c90183b3968d9658ffe0b3ba29dd5 Mon Sep 17 00:00:00 2001 From: thomascube <thomas@roundcube.net> Date: Thu, 18 Sep 2008 16:48:04 -0400 Subject: [PATCH] Also list message/rfc822 parts as attachment if a filename is specified --- program/lib/mime.inc | 45 ++++++++++++++++++++++++++------------------- 1 files changed, 26 insertions(+), 19 deletions(-) diff --git a/program/lib/mime.inc b/program/lib/mime.inc index 75c2d40..16fc52d 100644 --- a/program/lib/mime.inc +++ b/program/lib/mime.inc @@ -32,13 +32,15 @@ $MIME_VIDEO = 6; $MIME_OTHER = 7; -function iml_ClosingParenPos($str, $start){ +function iml_ClosingParenPos($str, $start) { $level=0; $len = strlen($str); $in_quote = 0; - for ($i=$start;$i<$len;$i++){ - if ($str[$i]=="\"") $in_quote = ($in_quote + 1) % 2; - if (!$in_quote){ + + 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; @@ -51,27 +53,32 @@ $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){ - if ($str[$i] == " ") $id++; //space means new element - else if ($str[$i]=="("){ //new part + + for ($i=0; $i<$len; $i++) { + if ($str[$i] == '"') { + $in_quote = ($in_quote + 1) % 2; + } else if (!$in_quote) { + if ($str[$i] == " ") { //space means new element + $id++; + while ($str[$i+1] == " ") $i++; // skip additional spaces + } else if ($str[$i]=="(") { //new part $i++; $endPos = iml_ClosingParenPos($str, $i); $partLen = $endPos - $i; + if ($partLen < 0) break; $part = substr($str, $i, $partLen); $a[$id] = iml_ParseBSString($part); //send part string - if ($verbose){ - echo "{>".$endPos."}"; - flush(); - } $i = $endPos; - }else $a[$id].=$str[$i]; //add to current element in array - }else if ($in_quote){ - if ($str[$i]=="\\") $i++; //escape backslashes - else $a[$id].=$str[$i]; //add to current element in array + } 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 } } @@ -82,7 +89,7 @@ function iml_GetRawStructureArray($str){ $line=substr($str, 1, strlen($str) - 2); $line = str_replace(")(", ") (", $line); - + $struct = iml_ParseBSString($line); if ((strcasecmp($struct[0], "message")==0) && (strcasecmp($struct[1], "rfc822")==0)){ $struct = array($struct); -- Gitblit v1.9.1