@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.

PHP8.1 fix for DiffusionServeController serveRequest()

Summary:
When a 'git pull' is done to an https git URL, the $_SERVER variables PHP_AUTH_USER and PHP_AUTH_PW will be unset, causing PHP 8.1 to throw strlen(null) errors.

This update fixes the issue by defaulting the values to '', which results in $have_user and $have_pass having false values as desired.

Fixes T15520

Test Plan: arc unit

Reviewers: O1 Blessed Committers, valerio.bozzolan

Reviewed By: O1 Blessed Committers, valerio.bozzolan

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

Maniphest Tasks: T15520

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

+25 -2
+2
src/__phutil_library_map__.php
··· 1052 1052 'DiffusionSSHWorkflow' => 'applications/diffusion/ssh/DiffusionSSHWorkflow.php', 1053 1053 'DiffusionSearchQueryConduitAPIMethod' => 'applications/diffusion/conduit/DiffusionSearchQueryConduitAPIMethod.php', 1054 1054 'DiffusionServeController' => 'applications/diffusion/controller/DiffusionServeController.php', 1055 + 'DiffusionServeControllerTestCase' => 'applications/diffusion/controller/__tests__/DiffusionServeControllerTestCase.php', 1055 1056 'DiffusionServiceRef' => 'applications/diffusion/ref/DiffusionServiceRef.php', 1056 1057 'DiffusionSetPasswordSettingsPanel' => 'applications/diffusion/panel/DiffusionSetPasswordSettingsPanel.php', 1057 1058 'DiffusionSetupException' => 'applications/diffusion/exception/DiffusionSetupException.php', ··· 7103 7104 'DiffusionSSHWorkflow' => 'PhabricatorSSHWorkflow', 7104 7105 'DiffusionSearchQueryConduitAPIMethod' => 'DiffusionQueryConduitAPIMethod', 7105 7106 'DiffusionServeController' => 'DiffusionController', 7107 + 'DiffusionServeControllerTestCase' => 'PhabricatorTestCase', 7106 7108 'DiffusionServiceRef' => 'Phobject', 7107 7109 'DiffusionSetPasswordSettingsPanel' => 'PhabricatorSettingsPanel', 7108 7110 'DiffusionSetupException' => 'Exception',
+2 -2
src/applications/diffusion/controller/DiffusionServeController.php
··· 183 183 // won't prompt users who provide a username but no password otherwise. 184 184 // See T10797 for discussion. 185 185 186 - $have_user = strlen(idx($_SERVER, 'PHP_AUTH_USER')); 187 - $have_pass = strlen(idx($_SERVER, 'PHP_AUTH_PW')); 186 + $have_user = strlen(idx($_SERVER, 'PHP_AUTH_USER', '')); 187 + $have_pass = strlen(idx($_SERVER, 'PHP_AUTH_PW', '')); 188 188 if ($have_user && $have_pass) { 189 189 $username = $_SERVER['PHP_AUTH_USER']; 190 190 $password = new PhutilOpaqueEnvelope($_SERVER['PHP_AUTH_PW']);
+21
src/applications/diffusion/controller/__tests__/DiffusionServeControllerTestCase.php
··· 1 + <?php 2 + 3 + final class DiffusionServeControllerTestCase extends PhabricatorTestCase { 4 + protected function getPhabricatorTestCaseConfiguration() { 5 + return array( 6 + self::PHABRICATOR_TESTCONFIG_BUILD_STORAGE_FIXTURES => true, 7 + ); 8 + } 9 + 10 + public function testHandleRequest() { 11 + $aphront_request = new AphrontRequest('example.com', '/'); 12 + $diffusion_serve_controller = new DiffusionServeController(); 13 + 14 + $diffusion_serve_controller->setRequest($aphront_request); 15 + $result = $diffusion_serve_controller->handleRequest($aphront_request); 16 + $this->assertTrue(true, 'handleRequest did not throw an error'); 17 + $this->assertTrue($result instanceof PhabricatorVCSResponse, 18 + 'handleRequest() returns PhabricatorVCSResponse object'); 19 + } 20 + 21 + }