Aleksander Machniak
2015-11-18 5143c47e0feeff92ac3dabf9277e23c13a6379f0
Fix rcube_utils::words_match() to work with mixed/invalid/binary content (T844)
2 files modified
37 ■■■■ changed files
program/lib/Roundcube/rcube_utils.php 14 ●●●● patch | view | raw | blame | history
tests/Framework/Utils.php 23 ●●●●● patch | view | raw | blame | history
program/lib/Roundcube/rcube_utils.php
@@ -993,12 +993,18 @@
     */
    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++;
            }
        }
tests/Framework/Utils.php
@@ -395,6 +395,29 @@
    }
    /**
     * 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()
     */
    function test_is_absolute_path()