1
0
Fork 0
mirror of https://we.phorge.it/source/phorge.git synced 2024-11-25 16:22:43 +01:00

Fix PHP 8.1 "strlen(null)" exceptions trying to authenticate via custom OAuth provider

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. Phorge adopts `phutil_nonempty_string()` as a replacement.

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

This change also replaces two other `strlen()` calls, only based on //reading// the code but not based on triggering exceptions.

```
EXCEPTION: (RuntimeException) strlen(): Passing null to parameter #1 ($string) of type string is deprecated at [<arcanist>/src/error/PhutilErrorHandler.php:261]
arcanist(), ava(), phorge(), wmf-ext-misc()
  #0 <#2> PhutilErrorHandler::handleError(integer, string, string, integer) called at [<phorge>/applications/auth/adapter/PhutilOAuth1AuthAdapter.php:121]
```

```
EXCEPTION: (RuntimeException) strlen(): Passing null to parameter #1 ($string) of type string is deprecated at [<arcanist>/src/error/PhutilErrorHandler.php:261]
arcanist(), ava(), phorge(), wmf-ext-misc()
  #0 <#2> PhutilErrorHandler::handleError(integer, string, string, integer) called at [<phorge>/applications/auth/adapter/PhutilOAuth1AuthAdapter.php:125]
```

Closes T15588

Test Plan: Go to `/auth/login/mediawiki:whatever/` and at least see no `strlen()` errors anymore (while further issues remain). See T15588 for details.

Reviewers: O1 Blessed Committers, Matthew

Reviewed By: O1 Blessed Committers, Matthew

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

Maniphest Tasks: T15588

Differential Revision: https://we.phorge.it/D25373
This commit is contained in:
Andre Klapper 2023-08-11 20:57:34 +02:00
parent 10ee019785
commit 085769ceb6

View file

@ -104,7 +104,7 @@ abstract class PhutilOAuth1AuthAdapter extends PhutilAuthAdapter {
->setSignatureMethod($this->getSignatureMethod()); ->setSignatureMethod($this->getSignatureMethod());
$consumer_key = $this->getConsumerKey(); $consumer_key = $this->getConsumerKey();
if (strlen($consumer_key)) { if (phutil_nonempty_string($consumer_key)) {
$future->setConsumerKey($consumer_key); $future->setConsumerKey($consumer_key);
} else { } else {
throw new Exception( throw new Exception(
@ -118,11 +118,11 @@ abstract class PhutilOAuth1AuthAdapter extends PhutilAuthAdapter {
$future->setConsumerSecret($consumer_secret); $future->setConsumerSecret($consumer_secret);
} }
if (strlen($this->getToken())) { if (phutil_nonempty_string($this->getToken())) {
$future->setToken($this->getToken()); $future->setToken($this->getToken());
} }
if (strlen($this->getTokenSecret())) { if (phutil_nonempty_string($this->getTokenSecret())) {
$future->setTokenSecret($this->getTokenSecret()); $future->setTokenSecret($this->getTokenSecret());
} }
@ -137,7 +137,7 @@ abstract class PhutilOAuth1AuthAdapter extends PhutilAuthAdapter {
$request_token_uri = $this->getRequestTokenURI(); $request_token_uri = $this->getRequestTokenURI();
$future = $this->newOAuth1Future($request_token_uri); $future = $this->newOAuth1Future($request_token_uri);
if (strlen($this->getCallbackURI())) { if (phutil_nonempty_string($this->getCallbackURI())) {
$future->setCallbackURI($this->getCallbackURI()); $future->setCallbackURI($this->getCallbackURI());
} }