summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAleksander Machniak <alec@alec.pl>2014-09-13 12:36:54 +0200
committerAleksander Machniak <alec@alec.pl>2014-09-13 12:36:54 +0200
commit848e204ef9bdaf989e7e48025d4ea6ee21e7678e (patch)
tree8b0ca330c80077b2cf99247299c7df6756c7a40f
parent050b482b38ce3c2147af976ba6d5b229539c6558 (diff)
Fix validation of email addresses with IDNA domains (#1490067)
-rw-r--r--CHANGELOG1
-rw-r--r--program/lib/Roundcube/rcube_utils.php5
-rw-r--r--tests/Framework/Utils.php1
3 files changed, 5 insertions, 2 deletions
diff --git a/CHANGELOG b/CHANGELOG
index 5e02d9370..c04610077 100644
--- a/CHANGELOG
+++ b/CHANGELOG
@@ -60,6 +60,7 @@ CHANGELOG Roundcube Webmail
- Fix handling of email addresses with quoted domain part (#1490040)
- Fix comm_path update on task switch (#1490041)
- Fix error in MSSQL update script 2013061000.sql (#1490061)
+- Fix validation of email addresses with IDNA domains (#1490067)
RELEASE 1.0.2
-------------
diff --git a/program/lib/Roundcube/rcube_utils.php b/program/lib/Roundcube/rcube_utils.php
index 330322f10..a51247eae 100644
--- a/program/lib/Roundcube/rcube_utils.php
+++ b/program/lib/Roundcube/rcube_utils.php
@@ -103,13 +103,14 @@ class rcube_utils
}
foreach ($domain_array as $part) {
- if (!preg_match('/^(([A-Za-z0-9][A-Za-z0-9-]{0,61}[A-Za-z0-9])|([A-Za-z0-9]))$/', $part)) {
+ if (!preg_match('/^((xn--)?([A-Za-z0-9][A-Za-z0-9-]{0,61}[A-Za-z0-9])|([A-Za-z0-9]))$/', $part)) {
return false;
}
}
// last domain part
- if (preg_match('/[^a-zA-Z]/', array_pop($domain_array))) {
+ $last_part = array_pop($domain_array);
+ if (strpos($last_part, 'xn--') !== 0 && preg_match('/[^a-zA-Z]/', $last_part)) {
return false;
}
diff --git a/tests/Framework/Utils.php b/tests/Framework/Utils.php
index 560a8bde7..b32974d23 100644
--- a/tests/Framework/Utils.php
+++ b/tests/Framework/Utils.php
@@ -29,6 +29,7 @@ class Framework_Utils extends PHPUnit_Framework_TestCase
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'),
+ array('test@xn--e1aaa0cbbbcacac.xn--p1ai', 'IDNA domain'),
);
}