alecpl
2008-09-04 510ca2835b28c0dd0b5797460430bb5749d0ff8a
- fix for \" and \\ sequences in quoted strings


1 files modified
22 ■■■■■ changed files
program/lib/mime.inc 22 ●●●●● patch | view | raw | blame | history
program/lib/mime.inc
@@ -36,8 +36,10 @@
    $level=0;
    $len = strlen($str);
    $in_quote = 0;
    for ($i=$start;$i<$len;$i++){
        if ($str[$i]=="\"") $in_quote = ($in_quote + 1) % 2;
        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--;
@@ -51,11 +53,12 @@
    $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] == '"') {
        $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
@@ -67,10 +70,15 @@
                $part = substr($str, $i, $partLen);
                $a[$id] = iml_ParseBSString($part); //send part string
                $i = $endPos;
            }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
            else $a[$id].=$str[$i]; //add to current element in array
            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
        }
    }