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

pull/315/head
Aleksander Machniak 9 years ago
parent 818b78a893
commit 5143c47e0f

@ -993,12 +993,18 @@ class rcube_utils
*/
public static function words_match($haystack, $needle)
{
$a_needle = self::tokenize_string($needle, 1);
$haystack = join(" ", self::tokenize_string($haystack, 1));
$a_needle = self::tokenize_string($needle, 1);
$_haystack = join(" ", self::tokenize_string($haystack, 1));
$valid = strlen($_haystack) > 0;
$hits = 0;
$hits = 0;
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++;
}
}

@ -394,6 +394,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()
*/

Loading…
Cancel
Save