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
F3552973: D25778.1744915287.diff
Wed, Apr 16, 18:41
F3552868: D25778.1744910033.diff
Wed, Apr 16, 17:13
F3390331: D25778.1744465277.diff
Fri, Apr 11, 13:41
F3387583: D25778.1744438988.diff
Fri, Apr 11, 06:23
F3377254: D25778.1744337755.diff
Thu, Apr 10, 02:15
F3375193: D25778.1744304541.diff
Wed, Apr 9, 17:02
F3374461: D25778.1744289832.diff
Wed, Apr 9, 12:57
F3372751: D25778.1744251938.diff
Wed, Apr 9, 02:25

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