[wp-trac] [WordPress Trac] #25319: Preg_match() in class-phpmailer.php is causing timeout

WordPress Trac noreply at wordpress.org
Sat Sep 14 17:00:44 UTC 2013


#25319: Preg_match() in class-phpmailer.php is causing timeout
--------------------------+-----------------------------
 Reporter:  nicktc        |      Owner:
     Type:  defect (bug)  |     Status:  new
 Priority:  normal        |  Milestone:  Awaiting Review
Component:  Mail          |    Version:  3.6.1
 Severity:  normal        |   Keywords:  needs-patch
--------------------------+-----------------------------
 Hi,

 I tried to send an email via contact form 7 plugin. This wasn't working,
 so I debugged it. Found out that the actual problem is in the core, as I
 believe wp-includes/class-phpmailer.php is a core file.

 On line 737 it's executing a preg_match to validate the address, but while
 doing it it's timing out (more then 30 secs). Seems like an error perhaps
 in the regular expression. Or it must be a server thing, but I can't
 imagine that.

 Line 737:

 return preg_match('/^(?!(?>(?1)"?(?>\\\[
 -~]|[^"])"?(?1)){255,})(?!(?>(?1)"?(?>\\\[
 -~]|[^"])"?(?1)){65,}@)((?>(?>(?>((?>(?>(?>\x0D\x0A)?[       ])+|(?>[
 ]*\x0D\x0A)?[
 ]+)?)(\((?>(?2)(?>[\x01-\x08\x0B\x0C\x0E-\'*-\[\]-\x7F]|\\\[\x00-\x7F]|(?3)))*(?2)\)))+(?2))|(?2))?)([!#-\'*+\/-9=?^-~-]+|"(?>(?2)(?>[\x01-\x08\x0B\x0C\x0E-!#-\[\]-\x7F]|\\\[\x00-\x7F]))*(?2)")(?>(?1)\.(?1)(?4))*(?1)@(?!(?1)[a-z0-9-]{64,})(?1)(?>([a-z0-9](?>[a-z0-9-]*[a-z0-9])?)(?>(?1)\.(?!(?1)[a-z0-9-]{64,})(?1)(?5)){0,126}|\[(?:(?>IPv6:(?>([a-f0-9]{1,4})(?>:(?6)){7}|(?!(?:.*[a-f0-9][:\]]){7,})((?6)(?>:(?6)){0,5})?::(?7)?))|(?>(?>IPv6:(?>(?6)(?>:(?6)){5}:|(?!(?:.*[a-f0-9]:){5,})(?8)?::(?>((?6)(?>:(?6)){0,3}):)?))?(25[0-5]|2[0-4][0-9]|1[0-9]{2}|[1-9]?[0-9])(?>\.(?9)){3}))\])(?1)$/isD',
 $address);

 I also tested this defect with a simple file like this:

 <?php

 $address = "username at email.com";
 var_dump(preg_match('/^(?!(?>(?1)"?(?>\\\[
 -~]|[^"])"?(?1)){255,})(?!(?>(?1)"?(?>\\\[
 -~]|[^"])"?(?1)){65,}@)((?>(?>(?>((?>(?>(?>\x0D\x0A)?[     ])+|(?>[
 ]*\x0D\x0A)?[
 ]+)?)(\((?>(?2)(?>[\x01-\x08\x0B\x0C\x0E-\'*-\[\]-\x7F]|\\\[\x00-\x7F]|(?3)))*(?2)\)))+(?2))|(?2))?)([!#-\'*+\/-9=?^-~-]+|"(?>(?2)(?>[\x01-\x08\x0B\x0C\x0E-!#-\[\]-\x7F]|\\\[\x00-\x7F]))*(?2)")(?>(?1)\.(?1)(?4))*(?1)@(?!(?1)[a-z0-9-]{64,})(?1)(?>([a-z0-9](?>[a-z0-9-]*[a-z0-9])?)(?>(?1)\.(?!(?1)[a-z0-9-]{64,})(?1)(?5)){0,126}|\[(?:(?>IPv6:(?>([a-f0-9]{1,4})(?>:(?6)){7}|(?!(?:.*[a-f0-9][:\]]){7,})((?6)(?>:(?6)){0,5})?::(?7)?))|(?>(?>IPv6:(?>(?6)(?>:(?6)){5}:|(?!(?:.*[a-f0-9]:){5,})(?8)?::(?>((?6)(?>:(?6)){0,3}):)?))?(25[0-5]|2[0-4][0-9]|1[0-9]{2}|[1-9]?[0-9])(?>\.(?9)){3}))\])(?1)$/isD',
 $address));

 ?>

 You wil see that it takes a lot of time, or even exceeds the maximum
 execution time.

--
Ticket URL: <http://core.trac.wordpress.org/ticket/25319>
WordPress Trac <http://core.trac.wordpress.org/>
WordPress blogging software


More information about the wp-trac mailing list