@recaptime-dev's working patches + fork for Phorge, a community fork of Phabricator. (Upstream dev and stable branches are at upstream/main and upstream/stable respectively.) hq.recaptime.dev/wiki/Phorge
phorge phabricator
1
fork

Configure Feed

Select the types of activity you want to include in your feed.

Fix PHP 8.1 issue in DifferentialChangeset getOldStatePathVector()

Summary:
The DifferentialChangeset getOldStatePathVector() method assumes oldFile and filename are set.
This worked under PHP <= 8.0, but fails for PHP >= 8.1 with error messsage

```
strlen(): Passing null to parameter #1 ($string) of type string is deprecated
```

Fixes T15517

Test Plan:
Create a diff in which a new file is added.
This file will have oldFile NULL and filename a string.
View the diff https://my.phorge.site/D1234

Reviewers: O1 Blessed Committers, Matthew

Reviewed By: O1 Blessed Committers, Matthew

Subscribers: speck, tobiaswiese, valerio.bozzolan, Matthew, Cigaryno

Maniphest Tasks: T15517

Differential Revision: https://we.phorge.it/D25323

authored by

Steve Campbell and committed by
sten
e8ea7a4a 98dfac53

+24 -4
+2
src/__phutil_library_map__.php
··· 488 488 'DifferentialChangesetRenderer' => 'applications/differential/render/DifferentialChangesetRenderer.php', 489 489 'DifferentialChangesetSearchConduitAPIMethod' => 'applications/differential/conduit/DifferentialChangesetSearchConduitAPIMethod.php', 490 490 'DifferentialChangesetSearchEngine' => 'applications/differential/query/DifferentialChangesetSearchEngine.php', 491 + 'DifferentialChangesetTestCase' => 'applications/differential/storage/__tests__/DifferentialChangesetTestCase.php', 491 492 'DifferentialChangesetTestRenderer' => 'applications/differential/render/DifferentialChangesetTestRenderer.php', 492 493 'DifferentialChangesetTwoUpRenderer' => 'applications/differential/render/DifferentialChangesetTwoUpRenderer.php', 493 494 'DifferentialChangesetTwoUpTestRenderer' => 'applications/differential/render/DifferentialChangesetTwoUpTestRenderer.php', ··· 6501 6502 'DifferentialChangesetRenderer' => 'Phobject', 6502 6503 'DifferentialChangesetSearchConduitAPIMethod' => 'PhabricatorSearchEngineAPIMethod', 6503 6504 'DifferentialChangesetSearchEngine' => 'PhabricatorApplicationSearchEngine', 6505 + 'DifferentialChangesetTestCase' => 'PhabricatorTestCase', 6504 6506 'DifferentialChangesetTestRenderer' => 'DifferentialChangesetRenderer', 6505 6507 'DifferentialChangesetTwoUpRenderer' => 'DifferentialChangesetHTMLRenderer', 6506 6508 'DifferentialChangesetTwoUpTestRenderer' => 'DifferentialChangesetTestRenderer',
+6 -4
src/applications/differential/storage/DifferentialChangeset.php
··· 325 325 326 326 public function getOldStatePathVector() { 327 327 $path = $this->getOldFile(); 328 - if (!strlen($path)) { 328 + if (!phutil_nonempty_string($path)) { 329 329 $path = $this->getFilename(); 330 330 } 331 331 332 - $path = trim($path, '/'); 333 - $path = explode('/', $path); 332 + if (!phutil_nonempty_string($path)) { 333 + return null; 334 + } 334 335 335 - return $path; 336 + $path = trim($path, '/'); 337 + return explode('/', $path); 336 338 } 337 339 338 340 public function getNewStatePathVector() {
+16
src/applications/differential/storage/__tests__/DifferentialChangesetTestCase.php
··· 1 + <?php 2 + 3 + final class DifferentialChangesetTestCase extends PhabricatorTestCase { 4 + 5 + public function testPhp81() { 6 + $diff_change_set = new DifferentialChangeset(); 7 + try { 8 + $old_state_vector = $diff_change_set->getOldStatePathVector(); 9 + $this->assertTrue(true, 'getOldStatePathVector did not throw an error'); 10 + } catch (Throwable $ex) { 11 + $this->assertTrue(false, 12 + 'getOldStatePathVector threw an exception:'.$ex->getMessage()); 13 + } 14 + } 15 + 16 + }