From 968754b09ebc1b501d0840e8c4eb3d0f617a5080 Mon Sep 17 00:00:00 2001
From: alecpl <alec@alec.pl>
Date: Tue, 19 Apr 2011 04:23:31 -0400
Subject: [PATCH] - Fix regression in html conditional comments handling by washtml class

---
 tests/src/htmlcom.txt   |   16 ++++++++++++++++
 tests/mailfunc.php      |   16 +++++++++++++++-
 program/lib/washtml.php |    3 ++-
 3 files changed, 33 insertions(+), 2 deletions(-)

diff --git a/program/lib/washtml.php b/program/lib/washtml.php
index 0f8dc7e..e8befe8 100644
--- a/program/lib/washtml.php
+++ b/program/lib/washtml.php
@@ -273,7 +273,8 @@
       $this->config['base_url'] = '';
 
     // Remove invalid HTML comments (#1487759)
-    $html = preg_replace('/<!--[^->]*>/', '', $html);
+    // Don't remove valid conditional comments
+    $html = preg_replace('/<!--[^->[]*>/', '', $html);
 
     @$node->loadHTML($html);
     return $this->dumpHtml($node);
diff --git a/tests/mailfunc.php b/tests/mailfunc.php
index dc25f0c..5bf77b1 100644
--- a/tests/mailfunc.php
+++ b/tests/mailfunc.php
@@ -121,7 +121,7 @@
   function test_mailto()
   {
     $part = $this->get_html_part('src/mailto.txt');
-    
+
     // render HTML in normal mode
     $html = rcmail_html4inline(rcmail_print_body($part, array('safe' => false)), 'foo');
 
@@ -131,4 +131,18 @@
     $this->assertPattern('|'.preg_quote($mailto, '|').'|', $html, "Extended mailto links");
   }
 
+  /**
+   * Test the elimination of HTML comments
+   */
+  function test_html_comments()
+  {
+    $part = $this->get_html_part('src/htmlcom.txt');
+    $washed = rcmail_print_body($part, array('safe' => true));
+
+    // #1487759
+    $this->assertPattern('|<p>test1</p>|', $washed, "Buggy HTML comments");
+    // but conditional comments (<!--[if ...) should be removed
+    $this->assertNoPattern('|<p>test2</p>|', $washed, "Conditional HTML comments");
+  }
+
 }
diff --git a/tests/src/htmlcom.txt b/tests/src/htmlcom.txt
new file mode 100644
index 0000000..b3eb1de
--- /dev/null
+++ b/tests/src/htmlcom.txt
@@ -0,0 +1,16 @@
+<html>
+<head>
+<title>Roundcube Test Message</title>
+</head>
+<body>
+
+<!--REF>
+<p>test1</p>
+<!--DEREF>
+
+<!--[if gte mso 9]><xml>
+    <p>test2</p>
+</xml><![endif]-->
+
+</body>
+</html>
\ No newline at end of file

--
Gitblit v1.9.1