1
0
Fork 0
mirror of https://we.phorge.it/source/phorge.git synced 2024-11-10 00:42:41 +01:00

Fix PHP 8.1 "strlen(null)" exception which blocks Working Copy blueprint creation in Drydock

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. So, we adopt an explicit cast to string
in order to answer the question "Is this a non-empty string?" without relying on implicit
cast and deprecated things.

Note: this may highlight other absurd input values that might be worth correcting
instead of just ignoring. If phutil_string_cast() throws an exception in your
instance, report it to Phorge to evaluate and fix that specific corner case.

Closes T15409

Test Plan:
Applied this change and afterwards, selecting "Working Copy" on `/drydock/blueprint/edit/form/default/` does not show a RuntimeException on strlen() anymore. Instead, it shows a PhutilAggregateException covered in T15408.

Try also creating an integer "Custom Field" in some applications like Maniphest (maniphest.custom-field-definitions)
or in the People component (user.custom-field-definitions) etc., populating the related forms with your usual fuzzy tests.

Reviewers: O1 Blessed Committers, valerio.bozzolan

Reviewed By: O1 Blessed Committers, valerio.bozzolan

Subscribers: speck, tobiaswiese, valerio.bozzolan, Matthew, Cigaryno

Maniphest Tasks: T15409

Differential Revision: https://we.phorge.it/D25235
This commit is contained in:
Andre Klapper 2023-05-23 11:58:57 +02:00
parent 2ffbef8820
commit 19d9da7fea

View file

@ -24,7 +24,8 @@ final class PhabricatorStandardCustomFieldInt
public function getValueForStorage() { public function getValueForStorage() {
$value = $this->getFieldValue(); $value = $this->getFieldValue();
if (strlen($value)) { $is_nonempty = phutil_string_cast($value) !== '';
if ($is_nonempty) {
return $value; return $value;
} else { } else {
return null; return null;