One of my coworker (thank you Goran) reported an issue while trying a svn commit on a repository.
This was the related exception:
+---------------------------------------------------------------+ | * * * PUSH REJECTED BY EVIL DRAGON BUREAUCRATS * * * | +---------------------------------------------------------------+ \ \ ^ /^ \ / \ // \ \ |\___/| / \// .\ \ /V V \__ / // | \ \ *----* / / \/_/ // | \ \ \ | @___@` \/_ // | \ \ \/\ \ 0/0/| \/_ // | \ \ \ \ 0/0/0/0/| \/// | \ \ | | 0/0/0/0/0/_|_ / ( // | \ _\ | / 0/0/0/0/0/0/`/,_ _ _/ ) ; -. | _ _\.-~ / / ,-} _ *-.|.-~-. .~ ~ * \__/ `/\ / ~-. _ .-~ / \____(Oo) *. } { / ( (..) .----~-.\ \-` .~ //___\\\\ \ DENIED! ///.----..< \ _ -~ // \\\\ ///-._ _ _ _ _ _ _{^ - - - - ~ svn: E165001: Commit failed (details follow): svn: E165001: Commit blocked by pre-commit hook (exit code 255) with output: ... EXCEPTION: (InvalidArgumentException) Call to phutil_nonempty_string() expected null or a string, got: bool. at [<arcanist>/src/utils/utils.php:2124 ... #0 phutil_nonempty_string(boolean) called at [<phorge>/scripts/repository/commit_hook.php:189]
That is surely caused by this fix for PHP 8.1:
https://we.phorge.it/rP96ae4ba13acbf0e2f8932e950a92af0495f034d7
https://we.phorge.it/rP96ae4ba13acbf0e2f8932e950a92af0495f034d7#inline-40
In short it seems the PHP function getenv() can return FALSE. But, that value is absolutely not allowed by our phutil_nonempty_string().
It's funny because, if we use strlen() be essentially break PHP 8.1, but, if we use phutil_nonempty_string(), probably we risk to break every single use in the world.
(Dear Evan... please explain to me why a function that should just say "yes/no" to the question "Is this a non-empty string?" explodes instead if it is not a string. It would be OK to log that error, but an exception is really nonsense and too much.)
Anyway the fix is here: