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

Fix PHP 8.1 "strpos(null)" exception from PhutilCommandString which blocks arc patch

Summary:
For some reason it may happen that a specific command line argument receives a null argument
from PHP, instead of just an empty string.

Nowadays, this null value probably breaks almost whatever GNU/Linux or FreeBSD or Microsoft Windows
etc. implementations since everyone expect to receive a string.

This used to work in the past since functions like strpos() or strlen() accepted null, but not
anymore. This generate a deprecation warning since PHP 8.1, that is elevated as exception from
Phabricator/Phorge and breaking features.

Without getting into implementation logics (which doesn't make sense to fix all of them) the
calling function should just be kind. So we normalize nonsense null values to an empty string.

Note: this was the expected behavior prior to PHP 8.1.

Now we do that normalization explicitly, in this early point.

After this fix, also T15368 should probably be fixed.

Closes T15367

Test Plan:
- run "arc patch <something valid>"
- to you it must continue to work
- (to @ton it starts working right now)

Reviewers: O1 Blessed Committers, avivey

Reviewed By: O1 Blessed Committers, avivey

Subscribers: speck, tobiaswiese, Matthew, Cigaryno, ton

Maniphest Tasks: T15367

Differential Revision: https://we.phorge.it/D25205
This commit is contained in:
Valerio Bozzolan 2023-05-09 08:28:44 +02:00
parent d472896226
commit c14785c379

View file

@ -56,6 +56,13 @@ final class PhutilCommandString extends Phobject {
} }
} }
// Be generous about what we accept
// but normalize to a value that makes sense for a command line
// premising that CLIs only accept strings since that is how computers work
if ($value === null) {
$value = '';
}
switch ($mode) { switch ($mode) {
case self::MODE_LINUX: case self::MODE_LINUX:
return self::escapeLinux($value); return self::escapeLinux($value);