Problem/Motivation
The code assumes that page is a string, passing in an array results in a warning on PHP 7 and a fatal error on PHP 8. We discovered this because a security scanner on one of our websites triggered a lot of those errors.
Steps to reproduce
Visit /node?page[foo]=bla:
The website encountered an unexpected error. Please try again later.
TypeError: explode(): Argument #2 ($string) must be of type string, array given in explode() (line 58 of core/lib/Drupal/Core/Pager/PagerParameters.php).
explode() (Line: 58)
Drupal\Core\Pager\PagerParameters->getPagerQuery() (Line: 49)
Drupal\Core\Pager\PagerParameters->findPage() (Line: 304)
Drupal\views\Plugin\views\pager\SqlBase->setCurrentPage() (Line: 929)
Drupal\views\ViewExecutable->initPager() (Line: 1444)
Drupal\views\Plugin\views\query\Sql->build() (Line: 1321)
Drupal\views\ViewExecutable->build() (Line: 392)
Proposed resolution
Ignore non-string page query parameters.
Remaining tasks
User interface changes
API changes
Data model changes
Release notes snippet
| Comment | File | Size | Author |
|---|---|---|---|
| #6 | 3314010-6.patch | 546 bytes | narendra.rajwar27 |
| #4 | interdiff-3314010-2_3.txt | 564 bytes | anchal_gupta |
| #4 | 3314010-3.patch | 544 bytes | anchal_gupta |
| #2 | 3314010-2.patch | 537 bytes | immaculatexavier |
Comments
Comment #2
immaculatexavier commentedAttached patch for the stated requirement.
Comment #3
berdiran isset will not fix that, needs to verify additionaly to the !empty() that it is not an array.
Comment #4
anchal_gupta commentedI have uploaded the patch and addressed #3. Please review it
Comment #5
berdirThat's also not it. explode() must not be called with a non-string. The problem is not the rsult of it, it's the input. Reproduce manually and you will see that neither change fixes this problem.
Comment #6
narendra.rajwar27Added check not array with the existing one. Tried with multiple arguments(request parameters) seems to be working fine.
Comment #7
berdirYeah, like that, now we need a test. Maybe we can extend \Drupal\Tests\system\Functional\Pager\PagerTest::testMultiplePagers with another case.
Comment #8
smustgrave commentedThis issue is being reviewed by the kind folks in Slack, #need-reveiw-queue. We are working to keep the size of Needs Review queue [2700+ issues] to around 200, following Review a patch or merge require as a guide.
Sending back to NW for the tests requested in #7
Comment #10
johnv#3143617: Protect pager against [] for the page is older, has more activity .