Page MenuHomePhorge

PHP 8.1 "strlen(null)" exceptions block account registration with custom OAuth provider after redirect
Closed, ResolvedPublic

Description

  1. PHP 8.2.8, Phorge with D25373 in Phorge and D25374 in Arcanist applied on top
  2. As an admin, successfully set up a (custom) OAuth1 provider at http://phorge.localhost/auth/config/view/1/ - in this case https://gitlab.wikimedia.org/repos/phabricator/extensions/-/tree/wmf/stable/src/oauth
  3. As a user, go to http://phorge.localhost/auth/
  4. Select the login button to go to http://phorge.localhost/auth/login/mediawiki:whatever/
  5. Allow authentication via OAuth on the external website
  6. End up back on the Phorge installation, with the following error:
[2023-08-05 19:55:02] 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/provider/PhabricatorOAuth1AuthProvider.php:70]
  #1 <#2> PhabricatorOAuth1AuthProvider::processLoginRequest(PhabricatorAuthLoginController) called at [<phorge>/applications/auth/controller/PhabricatorAuthLoginController.php:42]
  #2 <#2> PhabricatorAuthLoginController::handleRequest(AphrontRequest) called at [<phorge>/aphront/configuration/AphrontApplicationConfiguration.php:284]
  #3 phlog(RuntimeException) called at [<phorge>/aphront/handler/PhabricatorDefaultRequestExceptionHandler.php:41]
  #4 PhabricatorDefaultRequestExceptionHandler::handleRequestThrowable(AphrontRequest, RuntimeException) called at [<phorge>/aphront/configuration/AphrontApplicationConfiguration.php:751]
  #5 AphrontApplicationConfiguration::handleThrowable(RuntimeException) called at [<phorge>/aphront/configuration/AphrontApplicationConfiguration.php:296]
  #6 AphrontApplicationConfiguration::processRequest(AphrontRequest, PhutilDeferredLog, AphrontPHPHTTPSink, MultimeterControl) called at [<phorge>/aphront/configuration/AphrontApplicationConfiguration.php:203]
  #7 AphrontApplicationConfiguration::runHTTPRequest(AphrontPHPHTTPSink) called at [/var/www/html/wmfphab/deployment/phabricator/webroot/index.php:35]

After fixing this, run into next issue:

[2023-08-05 20:34:07] 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/view/PhabricatorAuthAccountView.php:32]
  #1 <#2> phutil_tag(string, array, PhabricatorAuthAccountView) called at [<phorge>/view/form/control/AphrontFormControl.php:169]
  #2 <#2> phutil_tag(string, array, array) called at [<phorge>/view/form/PHUIFormLayoutView.php:49]
  #3 <#2> PHUIFormLayoutView::render() called at [<phorge>/view/form/AphrontFormView.php:160]
  #4 <#2> phutil_tag(string, array, array) called at [<phorge>/infrastructure/javelin/markup.php:70]
  #5 <#2> javelin_tag(string, array, array) called at [<phorge>/view/AphrontTagView.php:158]
  #6 <#2> phutil_escape_html(array) called at [<phorge>/infrastructure/markup/render.php:139]
  #7 <#2> phutil_escape_html(array) called at [<phorge>/infrastructure/markup/render.php:97]
  #8 <#2> phutil_tag(string, array, array) called at [<phorge>/view/phui/PHUITwoColumnView.php:236]
  #9 <#2> PHUITwoColumnView::buildFooter() called at [<phorge>/view/phui/PHUITwoColumnView.php:123]
  #10 <#2> PHUITwoColumnView::getTagContent() called at [<phorge>/view/AphrontTagView.php:161]
  #11 <#2> AphrontTagView::render() called at [<phorge>/view/AphrontView.php:222]
  #12 <#2> AphrontView::producePhutilSafeHTML() called at [<phorge>/infrastructure/markup/render.php:115]
  #13 <#2> phutil_escape_html(PHUITwoColumnView) called at [<phorge>/infrastructure/markup/render.php:171]
  #14 <#2> phutil_implode_html(string, array) called at [<phorge>/view/page/PhabricatorBarePageView.php:58]
  #15 <#2> PhabricatorBarePageView::willRenderPage() called at [<phorge>/view/page/PhabricatorStandardPageView.php:217]
  #16 <#2> PhabricatorStandardPageView::willRenderPage() called at [<phorge>/view/page/AphrontPageView.php:46]
  #17 <#2> AphrontPageView::render() called at [<phorge>/view/page/PhabricatorStandardPageView.php:911]
  #18 <#2> PhabricatorStandardPageView::produceAphrontResponse() called at [<phorge>/aphront/configuration/AphrontApplicationConfiguration.php:722]
  #19 <#2> AphrontApplicationConfiguration::produceResponse(AphrontRequest, PhabricatorStandardPageView) called at [<phorge>/aphront/configuration/AphrontApplicationConfiguration.php:299]
  #20 phlog(RuntimeException) called at [<phorge>/aphront/handler/PhabricatorDefaultRequestExceptionHandler.php:41]
  #21 PhabricatorDefaultRequestExceptionHandler::handleRequestThrowable(AphrontRequest, RuntimeException) called at [<phorge>/aphront/configuration/AphrontApplicationConfiguration.php:751]
  #22 AphrontApplicationConfiguration::handleThrowable(RuntimeException) called at [<phorge>/aphront/configuration/AphrontApplicationConfiguration.php:337]
  #23 AphrontApplicationConfiguration::processRequest(AphrontRequest, PhutilDeferredLog, AphrontPHPHTTPSink, MultimeterControl) called at [<phorge>/aphront/configuration/AphrontApplicationConfiguration.php:203]
  #24 AphrontApplicationConfiguration::runHTTPRequest(AphrontPHPHTTPSink) called at [/var/www/html/wmfphab/deployment/phabricator/webroot/index.php:35]