From 19a61851ae7bc9492504c4884db8a53afa5d06c5 Mon Sep 17 00:00:00 2001 From: Aleksander Machniak <alec@alec.pl> Date: Wed, 29 Jul 2015 14:39:07 -0400 Subject: [PATCH] Fix so imap folder attribute comparisons are case-insensitive (#1490466) + make in_array_nocase() much faster for ASCII strings --- program/lib/Roundcube/bootstrap.php | 28 +++++++++++++++++++--------- 1 files changed, 19 insertions(+), 9 deletions(-) diff --git a/program/lib/Roundcube/bootstrap.php b/program/lib/Roundcube/bootstrap.php index 8359905..0509c6b 100644 --- a/program/lib/Roundcube/bootstrap.php +++ b/program/lib/Roundcube/bootstrap.php @@ -54,7 +54,7 @@ } // framework constants -define('RCUBE_VERSION', '1.1.1'); +define('RCUBE_VERSION', '1.1.2'); define('RCUBE_CHARSET', 'UTF-8'); if (!defined('RCUBE_LIB_DIR')) { @@ -99,24 +99,34 @@ spl_autoload_register('rcube_autoload'); // set PEAR error handling (will also load the PEAR main class) -PEAR::setErrorHandling(PEAR_ERROR_CALLBACK, 'rcube_pear_error'); +@PEAR::setErrorHandling(PEAR_ERROR_CALLBACK, 'rcube_pear_error'); /** - * Similar function as in_array() but case-insensitive + * Similar function as in_array() but case-insensitive with multibyte support. * - * @param string $needle Needle value - * @param array $heystack Array to search in + * @param string $needle Needle value + * @param array $heystack Array to search in * * @return boolean True if found, False if not */ function in_array_nocase($needle, $haystack) { - $needle = mb_strtolower($needle); - foreach ((array)$haystack as $value) { - if ($needle === mb_strtolower($value)) { - return true; + // use much faster method for ascii + if (is_ascii($needle)) { + foreach ((array) $haystack as $value) { + if (strcasecmp($value, $needle) === 0) { + return true; + } + } + } + else { + $needle = mb_strtolower($needle); + foreach ((array) $haystack as $value) { + if ($needle === mb_strtolower($value)) { + return true; + } } } -- Gitblit v1.9.1