Page MenuHomePhabricator

Uncaught ConditionLimitException if the condition limit is reached when saving a filter
Open, Needs TriagePublicBUG REPORT

Description

Steps to replicate the issue (include links if applicable):

  • Add $wgAbuseFilterConditionLimit = 1; to your LocalSettings.php
  • Go to Special:AbuseFilter/new
  • Type anything in the filter description field
  • Paste the following conditions: edit_delta === 17 | edit_delta === 18
  • Save the filter

What happens?:
The following (uncaught) exception is thrown:

[eb52223e7414bec885b6f530] /wiki/Special:AbuseFilter/new MediaWiki\Extension\AbuseFilter\Parser\Exception\ConditionLimitException: Condition limit reached.

Backtrace:

from /var/www/html/w/extensions/AbuseFilter/includes/Parser/FilterEvaluator.php(248)
#0 /var/www/html/w/extensions/AbuseFilter/includes/Parser/FilterEvaluator.php(585): MediaWiki\Extension\AbuseFilter\Parser\FilterEvaluator->raiseCondCount()
#1 /var/www/html/w/extensions/AbuseFilter/includes/Parser/FilterEvaluator.php(599): MediaWiki\Extension\AbuseFilter\Parser\FilterEvaluator->evalNode()
#2 /var/www/html/w/extensions/AbuseFilter/includes/Parser/FilterEvaluator.php(439): MediaWiki\Extension\AbuseFilter\Parser\FilterEvaluator->evalNode()
#3 /var/www/html/w/extensions/AbuseFilter/includes/Parser/FilterEvaluator.php(306): MediaWiki\Extension\AbuseFilter\Parser\FilterEvaluator->evalTree()
#4 /var/www/html/w/extensions/AbuseFilter/includes/Parser/FilterEvaluator.php(324): MediaWiki\Extension\AbuseFilter\Parser\FilterEvaluator->checkSyntaxThrow()
#5 /var/www/html/w/extensions/AbuseFilter/includes/FilterValidator.php(135): MediaWiki\Extension\AbuseFilter\Parser\FilterEvaluator->checkSyntax()
#6 /var/www/html/w/extensions/AbuseFilter/includes/FilterValidator.php(70): MediaWiki\Extension\AbuseFilter\FilterValidator->checkValidSyntax()
#7 /var/www/html/w/extensions/AbuseFilter/includes/FilterStore.php(95): MediaWiki\Extension\AbuseFilter\FilterValidator->checkAll()
#8 /var/www/html/w/extensions/AbuseFilter/includes/View/AbuseFilterViewEdit.php(203): MediaWiki\Extension\AbuseFilter\FilterStore->saveFilter()
#9 /var/www/html/w/extensions/AbuseFilter/includes/View/AbuseFilterViewEdit.php(154): MediaWiki\Extension\AbuseFilter\View\AbuseFilterViewEdit->attemptSave()
#10 /var/www/html/w/extensions/AbuseFilter/includes/Special/SpecialAbuseFilter.php(169): MediaWiki\Extension\AbuseFilter\View\AbuseFilterViewEdit->show()
#11 /var/www/html/w/includes/specialpage/SpecialPage.php(701): MediaWiki\Extension\AbuseFilter\Special\SpecialAbuseFilter->execute()
#12 /var/www/html/w/includes/specialpage/SpecialPageFactory.php(1488): SpecialPage->run()
#13 /var/www/html/w/includes/MediaWiki.php(327): MediaWiki\SpecialPage\SpecialPageFactory->executePath()
#14 /var/www/html/w/includes/MediaWiki.php(923): MediaWiki->performRequest()
#15 /var/www/html/w/includes/MediaWiki.php(576): MediaWiki->main()
#16 /var/www/html/w/index.php(50): MediaWiki->run()
#17 /var/www/html/w/index.php(46): wfIndexMain()
#18 {main}

What should have happened instead?:
Either the condition limit is disabled when checking the syntax, or the exception should be caught and reported to the user.

Other information (browser name/version, screenshots, etc.):

This is happening because the ConditionLimitException class inherits directly from ExceptionBase. checkSyntaxThrow catches UserVisibleException only, so not this one (and also not InternalException, since those indicate errors in the AF extension itself and should bubble up). I think maybe disabling the condition limit would work. I'm not sure if making ConditionLimitException a user-visible exception is the right approach.

Event Timeline

matej_suchanek subscribed.

I think we can just disable the condition limit in this context.

Change 902750 had a related patch set uploaded (by Matěj Suchánek; author: Matěj Suchánek):

[mediawiki/extensions/AbuseFilter@master] Turn the condition limit off for simple tasks

https://gerrit.wikimedia.org/r/902750