diff options
author | Marc Alexander <admin@m-a-styles.de> | 2017-07-16 18:24:47 +0200 |
---|---|---|
committer | Marc Alexander <admin@m-a-styles.de> | 2017-07-16 18:24:47 +0200 |
commit | c56ebb53125676c7962c1547a649c982aef60664 (patch) | |
tree | 3b4f92da4dd270f662a0423e7ed11a0241f470b1 /phpBB/phpbb/search/fulltext_mysql.php | |
parent | d490190a99a137ab2a4c33f9ced4945614319855 (diff) | |
parent | 149375253685b3a38996f63015a74b7a0f53aa14 (diff) | |
download | forums-c56ebb53125676c7962c1547a649c982aef60664.tar forums-c56ebb53125676c7962c1547a649c982aef60664.tar.gz forums-c56ebb53125676c7962c1547a649c982aef60664.tar.bz2 forums-c56ebb53125676c7962c1547a649c982aef60664.tar.xz forums-c56ebb53125676c7962c1547a649c982aef60664.zip |
Merge branch 'prep-release-3.1.11' into prep-release-3.2.1
Diffstat (limited to 'phpBB/phpbb/search/fulltext_mysql.php')
-rw-r--r-- | phpBB/phpbb/search/fulltext_mysql.php | 21 |
1 files changed, 21 insertions, 0 deletions
diff --git a/phpBB/phpbb/search/fulltext_mysql.php b/phpBB/phpbb/search/fulltext_mysql.php index d5165df016..da1aad1c3a 100644 --- a/phpBB/phpbb/search/fulltext_mysql.php +++ b/phpBB/phpbb/search/fulltext_mysql.php @@ -272,6 +272,27 @@ class fulltext_mysql extends \phpbb\search\base foreach ($this->split_words as $i => $word) { + // Check for not allowed search queries for InnoDB. + // We assume similar restrictions for MyISAM, which is usually even + // slower but not as restrictive as InnoDB. + // InnoDB full-text search does not support the use of a leading + // plus sign with wildcard ('+*'), a plus and minus sign + // combination ('+-'), or leading a plus and minus sign combination. + // InnoDB full-text search only supports leading plus or minus signs. + // For example, InnoDB supports '+apple' but does not support 'apple+'. + // Specifying a trailing plus or minus sign causes InnoDB to report + // a syntax error. InnoDB full-text search does not support the use + // of multiple operators on a single search word, as in this example: + // '++apple'. Use of multiple operators on a single search word + // returns a syntax error to standard out. + // Also, ensure that the wildcard character is only used at the + // end of the line as it's intended by MySQL. + if (preg_match('#^(\+[+-]|\+\*|.+[+-]$|.+\*(?!$))#', $word)) + { + unset($this->split_words[$i]); + continue; + } + $clean_word = preg_replace('#^[+\-|"]#', '', $word); // check word length |