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 | 24 +++++++++++++++++-------
1 files changed, 17 insertions(+), 7 deletions(-)
diff --git a/program/lib/Roundcube/bootstrap.php b/program/lib/Roundcube/bootstrap.php
index f9505c3..0509c6b 100644
--- a/program/lib/Roundcube/bootstrap.php
+++ b/program/lib/Roundcube/bootstrap.php
@@ -104,19 +104,29 @@
/**
- * 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