summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAleksander Machniak <alec@alec.pl>2012-08-17 15:37:04 +0200
committerAleksander Machniak <alec@alec.pl>2012-08-17 15:37:04 +0200
commitc83b83eeae9806cb60ea3f41f2cff055b0c6ed7e (patch)
treec3a956f701be94ff9cc4bb335abc1ded478305d0
parentc72325faed3d244170650a1bf62ddca6eb1b5fa9 (diff)
Fix domain part check in email address validation function. Added test cases.
-rw-r--r--program/include/rcube_utils.php5
-rw-r--r--tests/Utils.php74
-rw-r--r--tests/phpunit.xml1
3 files changed, 80 insertions, 0 deletions
diff --git a/program/include/rcube_utils.php b/program/include/rcube_utils.php
index d1a8315ec..9f18b79c4 100644
--- a/program/include/rcube_utils.php
+++ b/program/include/rcube_utils.php
@@ -110,6 +110,11 @@ class rcube_utils
}
}
+ // last domain part
+ if (preg_match('/[^a-zA-Z]/', array_pop($domain_array))) {
+ return false;
+ }
+
$rcube = rcube::get_instance();
if (!$dns_check || !$rcube->config->get('email_dns_check')) {
diff --git a/tests/Utils.php b/tests/Utils.php
new file mode 100644
index 000000000..648b39989
--- /dev/null
+++ b/tests/Utils.php
@@ -0,0 +1,74 @@
+<?php
+
+/**
+ * Test class to test rcube_utils class
+ *
+ * @package Tests
+ */
+class Utils extends PHPUnit_Framework_TestCase
+{
+
+ /**
+ * Valid email addresses for test_valid_email()
+ */
+ function data_valid_email()
+ {
+ return array(
+ array('email@domain.com', 'Valid email'),
+ array('firstname.lastname@domain.com', 'Email contains dot in the address field'),
+ array('email@subdomain.domain.com', 'Email contains dot with subdomain'),
+ array('firstname+lastname@domain.com', 'Plus sign is considered valid character'),
+ array('email@123.123.123.123', 'Domain is valid IP address'),
+ array('email@[123.123.123.123]', 'Square bracket around IP address is considered valid'),
+ array('"email"@domain.com', 'Quotes around email is considered valid'),
+ array('1234567890@domain.com', 'Digits in address are valid'),
+ array('email@domain-one.com', 'Dash in domain name is valid'),
+ array('_______@domain.com', 'Underscore in the address field is valid'),
+ array('email@domain.name', '.name is valid Top Level Domain name'),
+ array('email@domain.co.jp', 'Dot in Top Level Domain name also considered valid (use co.jp as example here)'),
+ array('firstname-lastname@domain.com', 'Dash in address field is valid'),
+ );
+ }
+
+ /**
+ * Invalid email addresses for test_invalid_email()
+ */
+ function data_invalid_email()
+ {
+ return array(
+ array('plainaddress', 'Missing @ sign and domain'),
+ array('#@%^%#$@#$@#.com', 'Garbage'),
+ array('@domain.com', 'Missing username'),
+ array('Joe Smith <email@domain.com>', 'Encoded html within email is invalid'),
+ array('email.domain.com', 'Missing @'),
+ array('email@domain@domain.com', 'Two @ sign'),
+ array('.email@domain.com', 'Leading dot in address is not allowed'),
+ array('email.@domain.com', 'Trailing dot in address is not allowed'),
+ array('email..email@domain.com', 'Multiple dots'),
+ array('あいうえお@domain.com', 'Unicode char as address'),
+ array('email@domain.com (Joe Smith)', 'Text followed email is not allowed'),
+ array('email@domain', 'Missing top level domain (.com/.net/.org/etc)'),
+ array('email@-domain.com', 'Leading dash in front of domain is invalid'),
+// array('email@domain.web', '.web is not a valid top level domain'),
+ array('email@111.222.333.44444', 'Invalid IP format'),
+ array('email@domain..com', 'Multiple dot in the domain portion is invalid'),
+ );
+ }
+
+ /**
+ * @dataProvider data_valid_email
+ */
+ function test_valid_email($email, $title)
+ {
+ $this->assertTrue(rcube_utils::check_email($email, false), $title);
+ }
+
+ /**
+ * @dataProvider data_invalid_email
+ */
+ function test_invalid_email($email, $title)
+ {
+ $this->assertFalse(rcube_utils::check_email($email, false), $title);
+ }
+
+}
diff --git a/tests/phpunit.xml b/tests/phpunit.xml
index 4a3b883cf..cfd066e29 100644
--- a/tests/phpunit.xml
+++ b/tests/phpunit.xml
@@ -7,6 +7,7 @@
<file>MailDecode.php</file>
<file>MailFunc.php</file>
<file>ModCss.php</file>
+ <file>Utils.php</file>
<file>VCards.php</file>
</testsuite>
</testsuites>