Page MenuHomePhorge

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

Authored by aklapper on Aug 14 2024, 20:03.

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