Page MenuHomePhabricator

ip_in_range should accept explicit range notation
Closed, ResolvedPublic

Description

On Logstash, there are several entries for filters failing with

AbuseFilter parser error for filter xxx: Invalid IP range yyy

Examining those filters reveals that all such invalid ranges are explicit ranges, i.e. 1.2.3.4 - 1.2.3.55. AbuseFilter used to accept these ranges in the past, as IP::isInRange can handle them. However, rEABF7fade990d26c79fb6acc100653bcf639f724569a added IP range validation to avoid invalid notations to be used. The downside is that validation is performed with IP::isValidRange, which only checks for ranges in CIDR notation. Given that several filters use explicit notation, and it's a good idea to keep it valid as it's easier to use, we should somehow change the validation to accept these.
AFAICS, the IP class doesn't provide a method to validate explicit ranges, so it's probably worth adding one.

Event Timeline

Perhaps the IP class should have a method like rangeToCIDR()

Well, for the specific goals of this task, we'd need a method like isValidRange but for explicit ranges. Maybe something like isValidExplicitRange.

Change 498201 had a related patch set uploaded (by Daimona Eaytoy; owner: Daimona Eaytoy):
[mediawiki/core@master] IP: Add isValidExplicitRange function

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

Change 498204 had a related patch set uploaded (by Daimona Eaytoy; owner: Daimona Eaytoy):
[mediawiki/extensions/AbuseFilter@master] Allow single IPs and explicit ranges in ip_in_range

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

Change 522989 had a related patch set uploaded (by Daimona Eaytoy; owner: Daimona Eaytoy):
[mediawiki/libs/IPUtils@master] Add isValidExplicitRange function

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

Change 498201 abandoned by Daimona Eaytoy:
IP: Add isValidExplicitRange function

Reason:
In favour of I7a14d0b7b611eba4ca3c1710780179fa884b8b3e

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

Change 522989 abandoned by Daimona Eaytoy:
Add isValidExplicitRange function

Reason:
Done in I39f283dc8986d6971964f239992c33ca839f88eb

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

Yes, thanks :) The patch is still needed for single IPs, which I should've included in the task description.

Trying to use ip-util 2.0.0 in https://gerrit.wikimedia.org/r/#/c/mediawiki/vendor/+/582143/

19:08:02 1) AbuseFilterParserTest::testParser with data set "ip-in-range" ('ip_in_range( '12.34.56.78', '...0/0' )')
19:08:02 AFPUserVisibleException: invalidiprange
19:08:02 
19:08:02 /workspace/src/extensions/AbuseFilter/includes/parser/AbuseFilterParser.php:1381
19:08:02 /workspace/src/extensions/AbuseFilter/includes/parser/AbuseFilterParser.php:1160
19:08:02 /workspace/src/extensions/AbuseFilter/includes/parser/AbuseFilterParser.php:953
19:08:02 /workspace/src/extensions/AbuseFilter/includes/parser/AbuseFilterParser.php:875
19:08:02 /workspace/src/extensions/AbuseFilter/includes/parser/AbuseFilterParser.php:817
19:08:02 /workspace/src/extensions/AbuseFilter/includes/parser/AbuseFilterParser.php:806
19:08:02 /workspace/src/extensions/AbuseFilter/includes/parser/AbuseFilterParser.php:762
19:08:02 /workspace/src/extensions/AbuseFilter/includes/parser/AbuseFilterParser.php:752
19:08:02 /workspace/src/extensions/AbuseFilter/includes/parser/AbuseFilterParser.php:717
19:08:02 /workspace/src/extensions/AbuseFilter/includes/parser/AbuseFilterParser.php:693
19:08:02 /workspace/src/extensions/AbuseFilter/includes/parser/AbuseFilterParser.php:664
19:08:02 /workspace/src/extensions/AbuseFilter/includes/parser/AbuseFilterParser.php:632
19:08:02 /workspace/src/extensions/AbuseFilter/includes/parser/AbuseFilterParser.php:618
19:08:02 /workspace/src/extensions/AbuseFilter/includes/parser/AbuseFilterParser.php:544
19:08:02 /workspace/src/extensions/AbuseFilter/includes/parser/AbuseFilterParser.php:470
19:08:02 /workspace/src/extensions/AbuseFilter/includes/parser/AbuseFilterParser.php:383
19:08:02 /workspace/src/extensions/AbuseFilter/includes/parser/AbuseFilterParser.php:364
19:08:02 /workspace/src/extensions/AbuseFilter/includes/parser/AbuseFilterParser.php:345
19:08:02 /workspace/src/extensions/AbuseFilter/includes/parser/AbuseFilterParser.php:321
19:08:02 /workspace/src/extensions/AbuseFilter/tests/phpunit/unit/AbuseFilterParserTest.php:53
19:08:02 /workspace/src/tests/phpunit/MediaWikiUnitTestCase.php:103

The test contains: ip_in_range( '1.1.1.1', '0.0.0.0/0' ), which fails due to the range not being accepted.

Change 582480 had a related patch set uploaded (by Daimona Eaytoy; owner: Daimona Eaytoy):
[mediawiki/extensions/AbuseFilter@master] Fix a test for IPUtils 2.0.0

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

The test contains: ip_in_range( '1.1.1.1', '0.0.0.0/0' ), which fails due to the range not being accepted.

AFAIK it should have never been a valid range...

Change 582480 merged by jenkins-bot:
[mediawiki/extensions/AbuseFilter@master] Fix a test for IPUtils 2.0.0

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

@Reedy: is the ip-utils upgrade blocked on anything now?

T247212: Make new IPUtils release should be moving soon (well, the inclusion into MW core anyway!) due to Tim helping unblock T248237: IPUtils >=2.0.0 test failures on MW core

Gotta wait for Parsoid bumps to come into vendor, and then the core... Next couple of weeks that should've worked its way through at least

Done, docs updated (and blocked by my own test filter while doing so...)

Change 498204 merged by jenkins-bot:
[mediawiki/extensions/AbuseFilter@master] Allow single IPs in ip_in_range

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