- Fix handling of top-level domains with more than 5 chars or unicode chars (#1487883)
| | |
| | | CHANGELOG Roundcube Webmail |
| | | =========================== |
| | | |
| | | - Fix handling of top-level domains with more than 5 chars or unicode chars (#1487883) |
| | | - Fix usage of non-standard HTTP error codes (#1487797) |
| | | - Improve performance by including files with absolute path (#1487849) |
| | | - Move folder name truncation to client/skin (#1485412) |
| | |
| | | function __construct() |
| | | { |
| | | // Simplified domain expression for UTF8 characters handling |
| | | $utf_domain = '[^?&@"\'\\/()\s\r\t\n]+\\.[a-z]{2,5}'; |
| | | // Support unicode/punycode in top-level domain part |
| | | $utf_domain = '[^?&@"\'\\/()\s\r\t\n]+\\.([^\\x00-\\x40\\x5b-\\x60\\x7b-\\x7f]{2,}|xn--[a-z0-9]{2,})'; |
| | | $url1 = '.:;'; |
| | | $url2 = 'a-z0-9%=#@+?&\\/_~\\[\\]-'; |
| | | |
| | |
| | | // So, e-mail address should be validated also on server side after idn_to_ascii() use |
| | | //domain_literal = '\\x5b('+dtext+'|'+quoted_pair+')*\\x5d', |
| | | //sub_domain = '('+atom+'|'+domain_literal+')', |
| | | // allow punycode in last domain part for ICANN test domains |
| | | domain = '([^@\\x2e]+\\x2e)+([a-z]{2,}|xn--[a-z0-9]{2,})', |
| | | // allow punycode/unicode top-level domain |
| | | domain = '([^@\\x2e]+\\x2e)+([^\\x00-\\x40\\x5b-\\x60\\x7b-\\x7f]{2,}|xn--[a-z0-9]{2,})', |
| | | // ICANN e-mail test (http://idn.icann.org/E-mail_test) |
| | | icann_domains = [ |
| | | '\\u0645\\u062b\\u0627\\u0644\\x2e\\u0625\\u062e\\u062a\\u0628\\u0627\\u0631', |
| | |
| | | // setup some global vars used by mail steps |
| | | $SENT_MBOX = $RCMAIL->config->get('sent_mbox'); |
| | | $DRAFTS_MBOX = $RCMAIL->config->get('drafts_mbox'); |
| | | $SEARCH_MODS_DEFAULT = array('*' => array('subject'=>1, 'from'=>1), $SENT_MBOX => array('subject'=>1, 'to'=>1), $DRAFTS_MBOX => array('subject'=>1, 'to'=>1)); |
| | | |
| | | // Simplified for IDN in Unicode |
| | | //$EMAIL_ADDRESS_PATTERN = '([a-z0-9][a-z0-9\-\.\+\_]*@[a-z0-9][a-z0-9\-\.]*\\.[a-z]{2,5})'; |
| | | $EMAIL_ADDRESS_PATTERN = '([a-z0-9][a-z0-9\-\.\+\_]*@[^&@"\'.][^@&"\']*\\.[a-z]{2,5})'; |
| | | $SEARCH_MODS_DEFAULT = array( |
| | | '*' => array('subject'=>1, 'from'=>1), |
| | | $SENT_MBOX => array('subject'=>1, 'to'=>1), |
| | | $DRAFTS_MBOX => array('subject'=>1, 'to'=>1) |
| | | ); |
| | | |
| | | // actions that do not require imap connection here |
| | | $NOIMAP_ACTIONS = array('addcontact', 'autocomplete', 'upload', 'display-attachment', 'remove-attachment', 'get'); |
| | |
| | | */ |
| | | function rcmail_alter_html_link($matches) |
| | | { |
| | | global $RCMAIL, $EMAIL_ADDRESS_PATTERN; |
| | | global $RCMAIL; |
| | | |
| | | // Support unicode/punycode in top-level domain part |
| | | $EMAIL_PATTERN = '([a-z0-9][a-z0-9\-\.\+\_]*@[^&@"\'.][^@&"\']*\\.([^\\x00-\\x40\\x5b-\\x60\\x7b-\\x7f]{2,}|xn--[a-z0-9]{2,}))'; |
| | | |
| | | $tag = $matches[1]; |
| | | $attrib = parse_attrib_string($matches[2]); |
| | |
| | | $attrib['href'] = $RCMAIL->url(array('task' => 'utils', 'action' => 'modcss', 'u' => $tempurl, 'c' => $GLOBALS['rcmail_html_container_id'])); |
| | | $end = ' />'; |
| | | } |
| | | else if (preg_match('/^mailto:'.$EMAIL_ADDRESS_PATTERN.'(\?[^"\'>]+)?/i', $attrib['href'], $mailto)) { |
| | | else if (preg_match('/^mailto:'.$EMAIL_PATTERN.'(\?[^"\'>]+)?/i', $attrib['href'], $mailto)) { |
| | | $attrib['href'] = $mailto[0]; |
| | | $attrib['onclick'] = sprintf( |
| | | "return %s.command('compose','%s',this)", |
| | | JS_OBJECT_NAME, |
| | | JQ($mailto[1].$mailto[2])); |
| | | JQ($mailto[1].$mailto[3])); |
| | | } |
| | | else if (!empty($attrib['href']) && $attrib['href'][0] != '#') { |
| | | $attrib['target'] = '_blank'; |