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

PhabricatorModularTransactionType: fix regression

Summary:
Fix a regression in this specific point:

    phutil_nonempty_string(integer) called at [<phorge>/src/applications/transactions/storage/PhabricatorModularTransactionType.php:342]

This regression was causing a broken Almanac page and maybe others.

Note: The function phutil_nonempty_string() is well-known to be very angry and
throws for any alien value. This is by design, and in many cases
this is appropriate. But not here.

The business logic here handles very generic types like integers
and really probably whatever scalar value coming from an user input
and then normalized to something else, not necessarily a string, but definitely
something that can be cast to string.

If you have better ideas about how to handle these cases, please join T15190.

Closes T15385

Test Plan:
To test Almanac:

1. go to `/almanac/network/` and create at least one network (example: "foo")
2. go to `/almanac/device/` and create at least one device (example: "bar")
3. visit that Device
4. Add Interface
    - test the creation of an empty Interface
    - test the creation of a right Interface (example: Network "foo", Address 127.0.0.1, Port 80)
    - nothing esplodes anymore

Reviewers: arnold, O1 Blessed Committers, avivey

Reviewed By: arnold, O1 Blessed Committers, avivey

Subscribers: avivey, speck, tobiaswiese, Matthew, Cigaryno

Maniphest Tasks: T15385

Differential Revision: https://we.phorge.it/D25220
This commit is contained in:
Valerio Bozzolan 2023-05-12 21:36:35 +02:00
parent 4d1adf6939
commit 2df7ea13a3

View file

@ -334,12 +334,28 @@ abstract class PhabricatorModularTransactionType
return $this->getEditor()->getIsNewObject(); return $this->getEditor()->getIsNewObject();
} }
/**
* Check whenever a new transaction's value is considered an "empty text"
* @param mixed $value A string, null, an integer...
* @param array $xactions Transactions
*/
final protected function isEmptyTextTransaction($value, array $xactions) { final protected function isEmptyTextTransaction($value, array $xactions) {
foreach ($xactions as $xaction) { foreach ($xactions as $xaction) {
$value = $xaction->getNewValue(); $value = $xaction->getNewValue();
} }
return !phutil_nonempty_string($value); // The $value can be a lot of stuff, null, string, integer and maybe more.
// We cast to string to answer the question "Is this string empty?".
// Note: Don't use phutil_nonempty_stringlike() since it was not designed
// for integers.
// Note: Don't use phutil_nonempty_scalar() since very probably we could
// receive a boolean, causing exceptions.
// https://we.phorge.it/T15239
$value_clean = phutil_string_cast($value);
// We made our lives easier and we don't need strlen(something)
// and we should not.
return $value_clean === '';
} }
/** /**