aboutsummaryrefslogtreecommitdiffstats
path: root/phpBB/phpbb/search/fulltext_mysql.php
diff options
context:
space:
mode:
authorMarc Alexander <admin@m-a-styles.de>2017-07-16 18:24:47 +0200
committerMarc Alexander <admin@m-a-styles.de>2017-07-16 18:24:47 +0200
commitc56ebb53125676c7962c1547a649c982aef60664 (patch)
tree3b4f92da4dd270f662a0423e7ed11a0241f470b1 /phpBB/phpbb/search/fulltext_mysql.php
parentd490190a99a137ab2a4c33f9ced4945614319855 (diff)
parent149375253685b3a38996f63015a74b7a0f53aa14 (diff)
downloadforums-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.php21
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