Page MenuHomePhorge

Fix PHP 8.1 "strlen(null)" exceptions which block rendering the People page of a user
ClosedPublic

Authored by aklapper on May 1 2023, 14:57.

Details

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 T15318

Test Plan

Applied these five changes on top of D25147 and D25153, and both /p/username/
and /people/manage/userid/ finally rendered in web browser.

Diff Detail

Repository
rP Phorge
Lint
Lint Not Applicable
Unit
Tests Not Applicable

Event Timeline

aklapper requested review of this revision.May 1 2023, 14:57

Thanks again

To be honest this legacy code is weird and probably $name will never be something different than NULL. So, no problems to me here really.

yesyes

src/applications/people/menuitem/PhabricatorPeopleBadgesProfileMenuItem.php
25

✅ I was not able to test any other value than null locally for $name. I also think it's probably not possible to change the name of this menu. Probably this is a uncompleted feature, like the home menu. In any case it's safe to assume that $name will be a string, when populated.

The phutil_nonempty_string() will report alien types, and that is OK.

src/applications/people/menuitem/PhabricatorPeopleCommitsProfileMenuItem.php
25

✅ Same as above

src/applications/people/menuitem/PhabricatorPeopleManageProfileMenuItem.php
25

✅ Same as above

src/applications/people/menuitem/PhabricatorPeopleRevisionsProfileMenuItem.php
25

✅ Same as above

src/applications/people/menuitem/PhabricatorPeopleTasksProfileMenuItem.php
25

✅ Same as above

This revision is now accepted and ready to land.May 1 2023, 19:23