mirror of
https://we.phorge.it/source/arcanist.git
synced 2024-11-25 08:12:40 +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:
parent
d472896226
commit
c14785c379
1 changed files with 7 additions and 0 deletions
|
@ -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);
|
||||||
|
|
Loading…
Reference in a new issue