|
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)
{
|