diff --git a/TitleBlacklist.list.php b/TitleBlacklist.list.php index d197a9c5..cec4dd89 100644 --- a/TitleBlacklist.list.php +++ b/TitleBlacklist.list.php @@ -175,7 +175,7 @@ class TitleBlacklist { } $blacklist = $this->getBlacklist(); foreach ( $blacklist as $item ) { - if ( $item->matches( $title, $action ) ) { + if ( $item->matches( $title->getFullText(), $action ) ) { if ( $this->isWhitelisted( $title, $action ) ) { return false; } @@ -199,7 +199,7 @@ class TitleBlacklist { } $whitelist = $this->getWhitelist(); foreach ( $whitelist as $item ) { - if ( $item->matches( $title, $action ) ) { + if ( $item->matches( $title->getFullText(), $action ) ) { return true; } } @@ -343,7 +343,7 @@ class TitleBlacklistEntry { * Check whether a user can perform the specified action * on the specified Title * - * @param $title Title to check + * @param $title string to check * @param $action %Action to check * @return bool TRUE if the the regex matches the title, and is not overridden * else false if it doesn't match (or was overridden) @@ -357,8 +357,17 @@ class TitleBlacklistEntry { return false; } + if ( isset( $this->mParams['antispoof'] ) && is_callable( 'AntiSpoof::checkUnicodeString' ) ) { + list( $ok, $norm ) = AntiSpoof::checkUnicodeString( $title ); + if ( $ok == "OK" ) { + list( $ver, $title ) = explode( ':', $norm, 2 ); + } else { + wfDebugLog( 'TitleBlacklist', 'AntiSpoof could not normalize "' . $title . '".' ); + } + } + wfSuppressWarnings(); - $match = preg_match( "/^(?:{$this->mRegex})$/us" . ( isset( $this->mParams['casesensitive'] ) ? '' : 'i' ), $title->getFullText() ); + $match = preg_match( "/^(?:{$this->mRegex})$/us" . ( isset( $this->mParams['casesensitive'] ) ? '' : 'i' ), $title ); wfRestoreWarnings(); global $wgUser; @@ -427,6 +436,9 @@ class TitleBlacklistEntry { if ( preg_match( '/errmsg\s*=\s*(.+)/i', $opt, $matches ) ) { $options['errmsg'] = $matches[1]; } + if ( $opt2 == 'antispoof' ) { + $options['antispoof'] = true; + } } // Process magic words preg_match_all( '/{{\s*([a-z]+)\s*:\s*(.+?)\s*}}/', $regex, $magicwords, PREG_SET_ORDER ); diff --git a/tests/ApiQueryTitleBlacklistTest.php b/tests/ApiQueryTitleBlacklistTest.php index 1f8164e7..344e9996 100644 --- a/tests/ApiQueryTitleBlacklistTest.php +++ b/tests/ApiQueryTitleBlacklistTest.php @@ -105,6 +105,28 @@ class ApiQueryTitleBlacklistTest extends ApiTestCase { $listed[0]['titleblacklist']['line'], 'Correct blacklist line is returned' ); + } + + /** + * Tests integration with the AntiSpoof extension + */ + function testAntiSpoofIntegration() { + if ( !class_exists( 'AntiSpoof') ) { + $this->markTestSkipped( "This test requires the AntiSpoof extension" ); + } + + $listed = $this->doApiRequest( array( + 'action' => 'titleblacklist', + 'tbtitle' => 'AVVVV', + 'tbaction' => 'create', + 'tbnooverride' => true, + ) ); + + $this->assertEquals( + 'blacklisted', + $listed[0]['titleblacklist']['result'], + 'Spoofed title is blacklisted' + ); } } diff --git a/tests/testSource b/tests/testSource index f73d9dd7..235cc671 100644 --- a/tests/testSource +++ b/tests/testSource @@ -2,3 +2,4 @@ .*[Ff]ail.* .*[Nn]yancat.* .*evil_acc.* +AW{1,10}