Page MenuHomePhorge

Fix PHP 8.1 "strlen(null)" exceptions on History page of Diffusion repo after changing text encoding
ClosedPublic

Authored by aklapper on Jun 11 2023, 23:15.

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.

EXCEPTION: (RuntimeException) strlen(): Passing null to parameter #1 ($string) of type string is deprecated at [<arcanist>/src/error/PhutilErrorHandler.php:261]
arcanist(head=master, ref.master=97e163187418), phorge(head=master, ref.master=108cbcd09bd3)
  #0 <#2> PhutilErrorHandler::handleError(integer, string, string, integer) called at [<phorge>/src/applications/repository/xaction/PhabricatorRepositoryEncodingTransaction.php:20]

Closes T15460

Test Plan

After applying these two changes, changing the text encoding of a Diffusion repository to a valid encoding and going to /diffusion/1/manage/history/, page renders correctly and shows no exception.

Diff Detail

Repository
rP Phorge
Lint
Lint Not Applicable
Unit
Tests Not Applicable

Event Timeline

speck requested changes to this revision.Jun 12 2023, 01:28

Similar here, on transactions it’s unclear if these are always strings, especially the use of the render functions. I think these should be null checked (for both vars, in both cases) and not use phutil.

This revision now requires changes to proceed.Jun 12 2023, 01:28

Use null checks instead of phutil_nonempty_string

This revision is now accepted and ready to land.Jun 12 2023, 01:46