Fix rcube_utils::words_match() to work with mixed/invalid/binary content (T844)

pull/312/head
Aleksander Machniak 9 years ago
parent ce7bd03b1d
commit cbe701ac4a

@ -948,11 +948,17 @@ class rcube_utils
public static function words_match($haystack, $needle) public static function words_match($haystack, $needle)
{ {
$a_needle = self::tokenize_string($needle, 1); $a_needle = self::tokenize_string($needle, 1);
$haystack = join(" ", self::tokenize_string($haystack, 1)); $_haystack = join(" ", self::tokenize_string($haystack, 1));
$valid = strlen($_haystack) > 0;
$hits = 0; $hits = 0;
foreach ($a_needle as $w) { foreach ($a_needle as $w) {
if (stripos($haystack, $w) !== false) { if ($valid) {
if (stripos($_haystack, $w) !== false) {
$hits++;
}
}
else if (stripos($haystack, $w) !== false) {
$hits++; $hits++;
} }
} }

@ -399,6 +399,29 @@ class Framework_Utils extends PHPUnit_Framework_TestCase
} }
} }
/**
* rcube:utils::words_match()
*/
function test_words_match()
{
$test = array(
array('', 'test', false),
array('test', 'test', true),
array('test', 'none', false),
array('test', 'test xyz', false),
array('test xyz', 'test xyz', true),
array('this is test', 'test', true),
// try some binary content
array('this is test ' . base64_decode('R0lGODlhDwAPAIAAAMDAwAAAACH5BAEAAAAALAAAAAAPAA8AQAINhI+py+0Po5y02otnAQA7'), 'test', true),
array('this is test ' . base64_decode('R0lGODlhDwAPAIAAAMDAwAAAACH5BAEAAAAALAAAAAAPAA8AQAINhI+py+0Po5y02otnAQA7'), 'none', false),
);
foreach ($test as $idx => $params) {
$result = rcube_utils::words_match($params[0], $params[1]);
$this->assertSame($params[2], $result, "words_match() at index $idx");
}
}
/** /**
* rcube:utils::is_absolute_path() * rcube:utils::is_absolute_path()
*/ */

Loading…
Cancel
Save