From: Meik S. <acy...@ph...> - 2009-10-28 15:11:18
|
Author: acydburn Date: Wed Oct 28 15:10:32 2009 New Revision: 10240 Log: Fix Bug #53245 - Correct regular expression escaping and only splitting keywords on space and "|" Modified: branches/phpBB-3_0_0/phpBB/includes/functions_admin.php Modified: branches/phpBB-3_0_0/phpBB/includes/functions_admin.php ============================================================================== *** branches/phpBB-3_0_0/phpBB/includes/functions_admin.php (original) --- branches/phpBB-3_0_0/phpBB/includes/functions_admin.php Wed Oct 28 15:10:32 2009 *************** *** 2549,2565 **** return; } ! $keywords = preg_split('#[\s+\-|*()]+#u', utf8_strtolower(preg_quote($keywords, '#')), 0, PREG_SPLIT_NO_EMPTY); $sql_keywords = ''; if (!empty($keywords)) { ! $keywords_pattern = '#' . implode('|', $keywords) . '#ui'; for ($i = 0, $num_keywords = sizeof($keywords); $i < $num_keywords; $i++) { $keywords[$i] = $db->sql_like_expression($db->any_char . $keywords[$i] . $db->any_char); } $operations = array(); foreach ($user->lang as $key => $value) { --- 2549,2572 ---- return; } ! // Use no preg_quote for $keywords because this would lead to sole backslashes being added ! // We also use an OR connection here for spaces and the | string. Currently, regex is not supported for searching (but may come later). ! $keywords = preg_split('#[\s|]+#u', utf8_strtolower($keywords), 0, PREG_SPLIT_NO_EMPTY); $sql_keywords = ''; if (!empty($keywords)) { ! $keywords_pattern = array(); ! ! // Build pattern and keywords... for ($i = 0, $num_keywords = sizeof($keywords); $i < $num_keywords; $i++) { + $keywords_pattern[] = preg_quote($keywords[$i], '#'); $keywords[$i] = $db->sql_like_expression($db->any_char . $keywords[$i] . $db->any_char); } + $keywords_pattern = '#' . implode('|', $keywords_pattern) . '#ui'; + $operations = array(); foreach ($user->lang as $key => $value) { |