Page MenuHomePhorge

Fix various potential PHP 8.1 "strlen(null)" exceptions
ClosedPublic

Authored by aklapper on Aug 14 2024, 20:03.
Tags
None
Referenced Files
F3338952: D25778.1743612246.diff
Tue, Apr 1, 16:44
F3337109: D25778.1743583482.diff
Tue, Apr 1, 08:44
F3336190: D25778.1743571371.diff
Tue, Apr 1, 05:22
F3335660: D25778.1743565568.diff
Tue, Apr 1, 03:46
F3331559: D25778.1743508958.diff
Mon, Mar 31, 12:02
F3329584: D25778.1743477122.diff
Mon, Mar 31, 03:12
F3327442: D25778.1743439714.diff
Sun, Mar 30, 16:48
F3324401: D25778.1743399954.diff
Sun, Mar 30, 05:45

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.

All lines changed in this patch had Parameter #1 $string of function strlen expects string, string|null given reported by PHPStan. Thus these should be safe to replace with phutil_nonempty_string as no calls care about the actual strlen() return value (length of a string).

Test Plan

Run static code analysis via phpstan analyse -l 9

Diff Detail

Repository
rP Phorge
Branch
php81StrlenVsStringNull
Lint
Lint Passed
Unit
Tests Passed
Build Status
Buildable 1547
Build 1547: arc lint + arc unit

Event Timeline

src/infrastructure/markup/rule/PhabricatorKeyboardRemarkupRule.php
25

At this point $v is a trimmed string, never null

sgtm

src/applications/diffusion/query/lowlevel/DiffusionLowLevelCommitQuery.php
129–133

✅ verified with my little eyes - result is coming from phutil_utf8ize() and it's a string or NULL

src/infrastructure/markup/rule/PhabricatorKeyboardRemarkupRule.php
25

✅ verified with my little eyes - the result comes from trim() so it's a string and never null

This revision is now accepted and ready to land.Aug 19 2024, 12:31