Project

General

Profile

Feature #15194

PHPCS sniff for un-restored switch_to_blog() calls

Added by Boone Gorges 4 months ago. Updated 2 months ago.

Status:
New
Priority name:
Normal
Assignee:
Category name:
Internal Tools and Workflow
Target version:
Start date:
2022-01-14
Due date:
% Done:

0%

Estimated time:

Description

When switch_to_blog() is called but not properly "closed" via restore_current_blog(), havoc ensues. The most recent instance of this is #15170.

We should introduce a PHPCS sniff to our custom ruleset that looks for switch_to_blog(), and then ensures that all code paths out of the method have a restore_current_blog() before returning.

History

#1 Updated by Boone Gorges 4 months ago

I just spent five minutes looking, and it's not immediately obvious to me how to do this in PHPCS. Here's the one custom sniff I've written: https://github.com/cuny-academic-commons/cac/blob/1.19.x/developer/phpcs/CAC/Sniffs/Database/RequirePrimaryKeySniff.php I think it would work similar to this https://github.com/cuny-academic-commons/cac/blob/dbaafcd561fa7a646a947e11d7158183610ae262/developer/phpcs/CAC/Sniffs/Database/RequirePrimaryKeySniff.php#L91, in that you'd find instances of `switch_to_blog()`, then parse all remaining tokens until you get to the end of the method. You'd have to identify the difference between various code paths (like stuff in an if block - not sure how to do that) and look for all possible ways to return from the method; then verify that each of the paths has a restore_current_blog().

Let's file this away as a project we can tackle once our scope for the academic year becomes clearer.

#2 Updated by Boone Gorges 2 months ago

  • Assignee changed from Boone Gorges to Jeremy Felt

Tentatively assigning to Jeremy for research.

Also available in: Atom PDF