Page MenuHomePhabricator

Database::isWriteQuery() returns true if the query has leading whitespace
Closed, ResolvedPublic

Description

>>> $dbr->isWriteQuery( 'SELECT foo' );
=> false
>>> $dbr->isWriteQuery( ' SELECT foo' );
=> true

Yes there probably shouldn't be leading whitespace in a query but the failure mode is weird, because it throws an exception for trying to do a write query on DB_REPLICA. Seen in the SelectCategory extension.

Event Timeline

Restricted Application added a subscriber: Aklapper. · View Herald Transcript
Anomie subscribed.

That extension is using query() rather than the usual query-building methods like select(), which is a code smell IMO.

Change 559466 had a related patch set uploaded (by Daimona Eaytoy; owner: Daimona Eaytoy):
[mediawiki/extensions/AbuseFilter@master] rdbms: Account for leading spaces in isWriteQuery

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

Change 559466 abandoned by Daimona Eaytoy:
rdbms: Account for leading spaces in isWriteQuery

Reason:
Whoops, wrong repo

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

Change 559467 had a related patch set uploaded (by Daimona Eaytoy; owner: Daimona Eaytoy):
[mediawiki/core@master] rdbms: Account for leading spaces in isWriteQuery

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

Daimona subscribed.

That extension is using query() rather than the usual query-building methods like select(), which is a code smell IMO.

I second that. Nevertheless, I believe this issue should be fixed.

Change 559467 merged by jenkins-bot:
[mediawiki/core@master] rdbms: Account for leading spaces in isWriteQuery

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