From ad18d63cc15d7b0a77a5d90dc9f8bd7476b90c8d Mon Sep 17 00:00:00 2001
From: alecpl <alec@alec.pl>
Date: Fri, 05 Feb 2010 03:25:22 -0500
Subject: [PATCH] - Fix handling of extended mailto links (with params) (#1486354)

---
 CHANGELOG                   |    1 +
 tests/src/mailto.txt        |    8 ++++++++
 program/steps/mail/func.inc |    4 ++--
 tests/mailfunc.php          |   16 ++++++++++++++++
 4 files changed, 27 insertions(+), 2 deletions(-)

diff --git a/CHANGELOG b/CHANGELOG
index ba2f0e9..6342307 100644
--- a/CHANGELOG
+++ b/CHANGELOG
@@ -1,6 +1,7 @@
 CHANGELOG RoundCube Webmail
 ===========================
 
+- Fix handling of extended mailto links (with params) (#1486354)
 - Fix sorting by date of messages without date header on servers without SORT (#1486286)
 - Fix inconsistency when not using default table names (#1486467)
 - Fix folder rename/delete buttons do not appear on creation of first folder (#1486468)
diff --git a/program/steps/mail/func.inc b/program/steps/mail/func.inc
index 9865308..e9adc15 100644
--- a/program/steps/mail/func.inc
+++ b/program/steps/mail/func.inc
@@ -1148,12 +1148,12 @@
     $attrib['href'] = "./bin/modcss.php?u=" . urlencode($attrib['href']) . "&amp;c=" . urlencode($GLOBALS['rcmail_html_container_id']);
     $end = ' />';
   }
-  else if (preg_match("/^mailto:$EMAIL_ADDRESS_PATTERN/i", $attrib['href'], $mailto)) {
+  else if (preg_match('/^mailto:'.$EMAIL_ADDRESS_PATTERN.'(\?[^"\'>]+)?/i', $attrib['href'], $mailto)) {
     $attrib['href'] = $mailto[0];
     $attrib['onclick'] = sprintf(
       "return %s.command('compose','%s',this)",
       JS_OBJECT_NAME,
-      JQ($mailto[1]));
+      JQ($mailto[1].$mailto[2]));
   }
   else if (!empty($attrib['href']) && $attrib['href'][0] != '#') {
     $attrib['target'] = '_blank';
diff --git a/tests/mailfunc.php b/tests/mailfunc.php
index 0e9363a..755cadc 100644
--- a/tests/mailfunc.php
+++ b/tests/mailfunc.php
@@ -114,6 +114,22 @@
     $this->assertPattern('#<a href="http://www.apple.com/legal/privacy/" target="_blank">http://www.apple.com/legal/privacy/</a>#', $html, "Links with target=_blank");
   }
 
+  /**
+   * Test mailto links in html messages
+   */
+  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');
+
+    $mailto = '<a href="mailto:me@me.com?subject=this is the subject&amp;body=this is the body"'
+      .' onclick="return rcmail.command(\'compose\',\'me@me.com?subject=this is the subject&amp;body=this is the body\',this)">e-mail</a>';
+
+    $this->assertPattern('|'.preg_quote($mailto, '|').'|', $html, "Extended mailto links");
+  }
+
 }
 
 ?>
\ No newline at end of file
diff --git a/tests/src/mailto.txt b/tests/src/mailto.txt
new file mode 100644
index 0000000..e70b12d
--- /dev/null
+++ b/tests/src/mailto.txt
@@ -0,0 +1,8 @@
+<html>
+<head></head>
+<body>
+
+<a href="mailto:me@me.com?subject=this is the subject&body=this is the body">e-mail</a>
+
+</body>
+</html>
\ No newline at end of file

--
Gitblit v1.9.1