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
F3306365: D25778.1743127517.diff
Thu, Mar 27, 02:05
F3304504: D25778.1743099185.diff
Wed, Mar 26, 18:13
F3303783: D25778.1743085894.diff
Wed, Mar 26, 14:31
F3302660: D25778.1743070497.diff
Wed, Mar 26, 10:14
F3302133: D25778.1743062615.diff
Wed, Mar 26, 08:03
F3300215: D25778.1743035500.diff
Wed, Mar 26, 00:31
F3294787: D25778.1742943523.diff
Mon, Mar 24, 22:58
F3289424: D25778.1742846628.diff
Sun, Mar 23, 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
Lint
Lint Not Applicable
Unit
Tests Not Applicable

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