alecpl
2009-10-19 efe93ad11610fcfd42c76a1cdddb07be00f8cf1b
tests/mailfunc.php
@@ -19,6 +19,8 @@
    $IMAP = $RCMAIL->imap;
    
    require_once 'steps/mail/func.inc';
    $GLOBALS['EMAIL_ADDRESS_PATTERN'] = $EMAIL_ADDRESS_PATTERN;
  }
  /**
@@ -43,7 +45,7 @@
    $part->replaces = array('ex1.jpg' => 'part_1.2.jpg', 'ex2.jpg' => 'part_1.2.jpg');
    
    // render HTML in normal mode
    $html = rcmail_print_body($part, array('safe' => false));
    $html = rcmail_html4inline(rcmail_print_body($part, array('safe' => false)), 'foo');
    $this->assertPattern('/src="'.$part->replaces['ex1.jpg'].'"/', $html, "Replace reference to inline image");
    $this->assertPattern('#background="./program/blocked.gif"#', $html, "Replace external background image");
@@ -53,15 +55,19 @@
    $this->assertNoPattern('/<form [^>]+>/', $html, "No form tags allowed");
    $this->assertPattern('/Subscription form/', $html, "Include <form> contents");
    $this->assertPattern('/<!-- input not allowed -->/', $html, "No input elements allowed");
    $this->assertPattern('/<!-- link not allowed -->/', $html, "No external links allowed");
    $this->assertPattern('/<a[^>]+ target="_blank">/', $html, "Set target to _blank");
    $this->assertTrue($GLOBALS['REMOTE_OBJECTS'], "Remote object detected");
    
    // render HTML in safe mode
    $html2 = rcmail_print_body($part, array('safe' => true));
    $html2 = rcmail_html4inline(rcmail_print_body($part, array('safe' => true)), 'foo');
    
    $this->assertPattern('/<style [^>]+>/', $html2, "Allow styles in safe mode");
    $this->assertPattern('#src="http://evilsite.net/mailings/ex3.jpg"#', $html2, "Allow external images in HTML (safe mode)");
    $this->assertPattern("#url\('http://evilsite.net/newsletter/image/bg/bg-64.jpg'\)#", $html2, "Allow external images in CSS (safe mode)");
    $css = '<link rel="stylesheet" type="text/css" href="./bin/modcss.php?u='.urlencode('http://anysite.net/styles/mail.css').'&amp;c=foo"';
    $this->assertPattern('#'.preg_quote($css).'#', $html2, "Filter external styleseehts with bin/modcss.php");
  }
  /**
@@ -71,10 +77,13 @@
  {
    $part = $this->get_html_part('src/htmlxss.txt');
    $washed = rcmail_print_body($part, array('safe' => true));
    $this->assertNoPattern('/src="skins/', $washed, "Remove local references");
    $this->assertNoPattern('/\son[a-z]+/', $wahsed, "Remove on* attributes");
    $this->assertNoPattern('/alert/', $wahsed, "Remove alerts");
    $this->assertNoPattern('/\son[a-z]+/', $washed, "Remove on* attributes");
    $html = rcmail_html4inline($washed, 'foo');
    $this->assertNoPattern('/onclick="return rcmail.command(\'compose\',\'xss@somehost.net\',this)"/', $html, "Clean mailto links");
    $this->assertNoPattern('/alert/', $html, "Remove alerts");
  }
  /**