Page MenuHomePhabricator

Regex search doesn't work with `/` delimiter in maintenance/grep.php
Closed, ResolvedPublicBUG REPORT

Description

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

pi@raspberrypi /v/l/mediawiki> php maintenance/grep.php installed
Main_Page:1:<strong>MediaWiki has been installed.</strong>
pi@raspberrypi /v/l/mediawiki> php maintenance/grep.php '/installed/i'
PHP Warning:  preg_match(): No ending delimiter '/' found in /var/lib/mediawiki/maintenance/grep.php on line 83
PHP Warning:  preg_match(): No ending delimiter '/' found in /var/lib/mediawiki/maintenance/grep.php on line 83
PHP Warning:  preg_match(): No ending delimiter '/' found in /var/lib/mediawiki/maintenance/grep.php on line 83
PHP Warning:  preg_match(): No ending delimiter '/' found in /var/lib/mediawiki/maintenance/grep.php on line 83
PHP Warning:  preg_match(): No ending delimiter '/' found in /var/lib/mediawiki/maintenance/grep.php on line 83
...

What should have happened instead?:

It should have matched the same page as it did without the regex markup, and not printed one PHP warning per wikipage.

Software version (skip for WMF-hosted wikis like Wikipedia): 1.38.4

but also in 1.42:
https://github.com/wikimedia/mediawiki/blob/wmf/1.42.0-wmf.25/maintenance/grep.php#L57
https://github.com/wikimedia/mediawiki/blob/master/maintenance/grep.php#L57

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

Essentially this can be fixed by deleting the index inside the first if block:

		if ( ( $regex[0] ?? '' ) === '/' ) {
			$delimRegex = $regex[0];
		} else {
			$delimRegex = '{' . $regex . '}';
		}

to:

		if ( ( $regex[0] ?? '' ) === '/' ) {
			$delimRegex = $regex;
		} else {
			$delimRegex = '{' . $regex . '}';
		}

Workaround:

Use inline flags to set mode in regular expression, such as (?i) for case insensitive search.

Event Timeline

labster renamed this task from Regex flag doesn't work with `/` delimiter in maintenance/grep.php to Regex search doesn't work with `/` delimiter in maintenance/grep.php .Apr 6 2024, 3:14 AM

Thanks for the report @labster. I can accept a Gerrit patch along these lines. It looks like you do have an account in Gerrit already.

Change #1017521 had a related patch set uploaded (by Labster; author: Labster):

[mediawiki/core@master] Fix slash-delimited regex from CLI on maintenence/grep.php (T361991)

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

Yeah, I have had a Gerrit account for seven years but I have finally gotten around to figuring out how it works. Hopefully this is what you need.

Change #1017521 had a related patch set uploaded (by Tim Starling; author: Labster):

[mediawiki/core@master] Fix slash-delimited regex from CLI on maintenence/grep.php

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

Change #1017521 merged by jenkins-bot:

[mediawiki/core@master] Fix slash-delimited regex from CLI on maintenence/grep.php

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

Change #1017482 had a related patch set uploaded (by Reedy; author: Labster):

[mediawiki/core@REL1_41] Fix slash-delimited regex from CLI on maintenence/grep.php

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

Change #1017483 had a related patch set uploaded (by Reedy; author: Labster):

[mediawiki/core@REL1_40] Fix slash-delimited regex from CLI on maintenence/grep.php

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

Change #1017484 had a related patch set uploaded (by Reedy; author: Labster):

[mediawiki/core@REL1_39] Fix slash-delimited regex from CLI on maintenence/grep.php

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

Change #1017484 merged by jenkins-bot:

[mediawiki/core@REL1_39] Fix slash-delimited regex from CLI on maintenence/grep.php

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

Change #1017482 merged by jenkins-bot:

[mediawiki/core@REL1_41] Fix slash-delimited regex from CLI on maintenence/grep.php

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

Change #1017483 merged by jenkins-bot:

[mediawiki/core@REL1_40] Fix slash-delimited regex from CLI on maintenence/grep.php

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

Reedy assigned this task to labster.