Aleksander Machniak
2015-11-05 e7d1a80a800f6f08c0a683d2be04b0db2a1f6523
program/lib/Roundcube/rcube_washtml.php
@@ -206,7 +206,7 @@
                        $value .= ' ' . $val;
                        // #1488535: Fix size units, so width:800 would be changed to width:800px
                        if (preg_match('/(left|right|top|bottom|width|height)/i', $cssid)
                        if (preg_match('/^(left|right|top|bottom|width|height)/i', $cssid)
                            && preg_match('/^[0-9]+$/', $val)
                        ) {
                            $value .= 'px';
@@ -243,8 +243,8 @@
                $t .= ' ' . $key . '="' . htmlspecialchars($value, ENT_QUOTES) . '"';
            }
            else if ($key == 'style' && ($style = $this->wash_style($value))) {
                $quot = strpos($style, '"') !== false ? "'" : '"';
                $t .= ' style=' . $quot . $style . $quot;
                // replace double quotes to prevent syntax error and XSS issues (#1490227)
                $t .= ' style="' . str_replace('"', '"', $style) . '"';
            }
            else if ($key == 'background' || ($key == 'src' && strtolower($node->tagName) == 'img')) { //check tagName anyway
                if (($src = $this->config['cid_map'][$value])
@@ -306,7 +306,7 @@
        $dump = '';
        do {
            switch($node->nodeType) {
            switch ($node->nodeType) {
            case XML_ELEMENT_NODE: //Check element
                $tagName = strtolower($node->tagName);
                if ($callback = $this->handlers[$tagName]) {
@@ -338,14 +338,9 @@
            case XML_HTML_DOCUMENT_NODE:
                $dump .= $this->dumpHtml($node, $level);
                break;
            case XML_DOCUMENT_TYPE_NODE:
                break;
            default:
                $dump .= '<!-- node type ' . $node->nodeType . ' -->';
            }
        } while($node = $node->nextSibling);
        }
        while($node = $node->nextSibling);
        return $dump;
    }
@@ -456,7 +451,7 @@
        // Remove invalid HTML comments (#1487759)
        // Don't remove valid conditional comments
        // Don't remove MSOutlook (<!-->) conditional comments (#1489004)
        $html = preg_replace('/<!--[^->\[\n]+>/', '', $html);
        $html = preg_replace('/<!--[^-<>\[\n]+>/', '', $html);
        // fix broken nested lists
        self::fix_broken_lists($html);