@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 DifferentialCommitMessageField renderFieldValue PHP 8.1 strlen(null) error

Summary:
arc diff throws strlen(null) error from DifferentialCommitMessageField renderFieldValue when calling a Phorge server running PHP 8.1

Add unit test, which required a new DifferentialTestCommitMessageField class so as to be able to test the abstract DifferentialCommitMessageField class methods.

Fixes T15530

Test Plan:
Make a change in a git repo with remote a Phorge server running PHP 8.1
Run:

```
arc diff
```
See exception thrown as per T15530

Reviewers: O1 Blessed Committers, valerio.bozzolan, avivey

Reviewed By: O1 Blessed Committers, valerio.bozzolan, avivey

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

Maniphest Tasks: T15530

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

authored by

Steve Campbell and committed by
sten
4b3c3848 9c8b9a6b

+31 -2
+2
src/__phutil_library_map__.php
··· 714 714 'DifferentialTabReplacementTestCase' => 'applications/differential/parser/__tests__/DifferentialTabReplacementTestCase.php', 715 715 'DifferentialTagsCommitMessageField' => 'applications/differential/field/DifferentialTagsCommitMessageField.php', 716 716 'DifferentialTasksCommitMessageField' => 'applications/differential/field/DifferentialTasksCommitMessageField.php', 717 + 'DifferentialTestCommitMessageField' => 'applications/differential/field/DifferentialTestCommitMessageField.php', 717 718 'DifferentialTestPlanCommitMessageField' => 'applications/differential/field/DifferentialTestPlanCommitMessageField.php', 718 719 'DifferentialTestPlanField' => 'applications/differential/customfield/DifferentialTestPlanField.php', 719 720 'DifferentialTitleCommitMessageField' => 'applications/differential/field/DifferentialTitleCommitMessageField.php', ··· 6760 6761 'DifferentialTabReplacementTestCase' => 'PhabricatorTestCase', 6761 6762 'DifferentialTagsCommitMessageField' => 'DifferentialCommitMessageField', 6762 6763 'DifferentialTasksCommitMessageField' => 'DifferentialCommitMessageField', 6764 + 'DifferentialTestCommitMessageField' => 'DifferentialCommitMessageField', 6763 6765 'DifferentialTestPlanCommitMessageField' => 'DifferentialCommitMessageField', 6764 6766 'DifferentialTestPlanField' => 'DifferentialCoreCustomField', 6765 6767 'DifferentialTitleCommitMessageField' => 'DifferentialCommitMessageField',
+1 -1
src/applications/differential/field/DifferentialCommitMessageField.php
··· 60 60 } 61 61 62 62 public function renderFieldValue($value) { 63 - if (!strlen($value)) { 63 + if (!phutil_nonempty_string($value)) { 64 64 return null; 65 65 } 66 66
+1 -1
src/applications/differential/field/DifferentialRevisionIDCommitMessageField.php
··· 72 72 } 73 73 74 74 public function renderFieldValue($value) { 75 - if (!strlen($value)) { 75 + if (!phutil_nonempty_string($value)) { 76 76 return null; 77 77 } 78 78
+10
src/applications/differential/field/DifferentialTestCommitMessageField.php
··· 1 + <?php 2 + 3 + /** 4 + * This class should only be used for unit tests 5 + */ 6 + final class DifferentialTestCommitMessageField 7 + extends DifferentialCommitMessageField { 8 + public function getFieldName() { return 'Test'; } 9 + public function getFieldOrder() { return 1; } 10 + }
+17
src/applications/differential/field/__tests__/DifferentialCommitMessageFieldTestCase.php
··· 28 28 unset($env); 29 29 } 30 30 31 + public function testRenderFieldValue() { 32 + $test_object = new DifferentialTestCommitMessageField(); 33 + $this->assertEqual('foo', $test_object->renderFieldValue('foo'), 34 + 'Normal strings should be rendered unaltered'); 35 + 36 + $this->assertEqual(null, $test_object->renderFieldValue(''), 37 + 'Empty strings should be returned as null'); 38 + 39 + $this->assertEqual(null, $test_object->renderFieldValue(null), 40 + 'null values strings should be returned as null'); 41 + 42 + $test_object = new DifferentialRevisionIDCommitMessageField(); 43 + $expected = 'http://phabricator.example.com/D123'; 44 + $this->assertEqual($expected, $test_object->renderFieldValue('123')); 45 + $this->assertEqual(null, $test_object->renderFieldValue(null)); 46 + } 47 + 31 48 }