@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 "strlen(null)" exceptions which block adding 2FA factor

Summary:
`strlen()` was used in Phabricator to check if a generic value is a non-empty string.
This behavior is deprecated since PHP 8.1. Phorge adopts `phutil_nonempty_string()` as a replacement.

Note: this may highlight other absurd input values that might be worth correcting
instead of just ignoring. If phutil_nonempty_string() throws an exception in your
instance, report it to Phorge to evaluate and fix that specific corner case.

Closes T15388

Test Plan:
Applied these two changes; afterwards managed to add a 2FA factor and `/settings/user/username/page/multifactor/?id=1` correctly listed mys Authentication Factors.

Additional tests:

- Unset any eventual personal MFA
- Setup a personal MFA
- Login/Logout using the MFA
- Remove a personal MFA
- Setup a personal enroll message from /auth/mfa/1/
- Setup a personal MFA
- Login/Logout using the MFA
- (then cleanup removing your test MFA)

Reviewers: O1 Blessed Committers, valerio.bozzolan

Reviewed By: O1 Blessed Committers, valerio.bozzolan

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

Maniphest Tasks: T15388

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

+3 -3
+2 -2
src/applications/auth/factor/PhabricatorAuthFactor.php
··· 413 413 $sync_type = PhabricatorAuthMFASyncTemporaryTokenType::TOKENTYPE; 414 414 $sync_token = null; 415 415 416 - $sync_key = $request->getStr($this->getMFASyncTokenFormKey()); 417 - if (strlen($sync_key)) { 416 + $sync_key = $request->getStr($this->getMFASyncTokenFormKey(), ''); 417 + if ($sync_key !== '') { 418 418 $sync_key_digest = PhabricatorHash::digestWithNamedKey( 419 419 $sync_key, 420 420 PhabricatorAuthMFASyncTemporaryTokenType::DIGEST_KEY);
+1 -1
src/applications/settings/panel/PhabricatorMultiFactorSettingsPanel.php
··· 257 257 // example, with SMS). 258 258 if (!$request->isFormPost() || !$request->getBool('mfa.start')) { 259 259 $enroll = $selected_provider->getEnrollMessage(); 260 - if (!strlen($enroll)) { 260 + if (!phutil_nonempty_string($enroll)) { 261 261 $enroll = $selected_provider->getEnrollDescription($viewer); 262 262 } 263 263