Page MenuHomePhorge

PHP 8.1 "strlen(null)" exceptions block rendering Differential Revision page
Closed, ResolvedPublic

Description

  1. PHP 8.2.6; Phorge at e11c5486c92bd75895eda4e0d905d8e49c0f68b1 with D25262 and D25263 on top
  2. Go to Differential at http://phorge.localhost/differential/
  3. Select Create Diff in upper right corner to go to http://phorge.localhost/differential/diff/create/
  4. In the Raw Diff field, paste content of a valid diff file (e.g. starting with diff --git a/a.php b/b.php)
  5. Select Create Diff button at the bottom
  6. Select Continue button to go to Create Revision page on http://phorge.localhost/differential/revision/attach/4/to/
  7. In the Title field, enter title
  8. In the Test Plan field, enter testplan
  9. Select Create New Revision button to go to http://phorge.localhost/D1
[2023-05-30 10:37:29] EXCEPTION: (RuntimeException) strlen(): Passing null to parameter #1 ($string) of type string is deprecated at [<arcanist>/src/error/PhutilErrorHandler.php:261]
arcanist(head=master, ref.master=18554ea76ceb), phorge(head=diff3, ref.master=e11c5486c92b, ref.diff3=e11c5486c92b)
  #0 <#2> PhutilErrorHandler::handleError(integer, string, string, integer) called at [<phorge>/src/applications/differential/customfield/DifferentialBranchField.php:42]
  #1 <#2> DifferentialBranchField::getBranchDescription(DifferentialDiff) called at [<phorge>/src/applications/differential/customfield/DifferentialBranchField.php:35]
  #2 <#2> DifferentialBranchField::renderDiffPropertyViewValue(DifferentialDiff) called at [<phorge>/src/applications/differential/controller/DifferentialRevisionViewController.php:1226]
  #3 <#2> DifferentialRevisionViewController::buildDiffPropertyList(DifferentialDiff, DifferentialRevision, array) called at [<phorge>/src/applications/differential/controller/DifferentialRevisionViewController.php:1188]
  #4 <#2> DifferentialRevisionViewController::buildDiffDetailView(array, DifferentialRevision, PhabricatorCustomFieldList) called at [<phorge>/src/applications/differential/controller/DifferentialRevisionViewController.php:343]
  #5 <#2> DifferentialRevisionViewController::handleRequest(AphrontRequest) called at [<phorge>/src/aphront/configuration/AphrontApplicationConfiguration.php:284]
  #6 phlog(RuntimeException) called at [<phorge>/src/aphront/handler/PhabricatorDefaultRequestExceptionHandler.php:41]
  #7 PhabricatorDefaultRequestExceptionHandler::handleRequestThrowable(AphrontRequest, RuntimeException) called at [<phorge>/src/aphront/configuration/AphrontApplicationConfiguration.php:751]
  #8 AphrontApplicationConfiguration::handleThrowable(RuntimeException) called at [<phorge>/src/aphront/configuration/AphrontApplicationConfiguration.php:296]
  #9 AphrontApplicationConfiguration::processRequest(AphrontRequest, PhutilDeferredLog, AphrontPHPHTTPSink, MultimeterControl) called at [<phorge>/src/aphront/configuration/AphrontApplicationConfiguration.php:203]
  #10 AphrontApplicationConfiguration::runHTTPRequest(AphrontPHPHTTPSink) called at [<phorge>/webroot/index.php:35]

Fix that exception; get next exception:

[2023-05-30 10:39:22] EXCEPTION: (RuntimeException) strlen(): Passing null to parameter #1 ($string) of type string is deprecated at [<arcanist>/src/error/PhutilErrorHandler.php:261]
arcanist(head=master, ref.master=18554ea76ceb), phorge(head=diff3, ref.master=e11c5486c92b, ref.diff3=e11c5486c92b)
  #0 <#2> PhutilErrorHandler::handleError(integer, string, string, integer) called at [<phorge>/src/applications/differential/customfield/DifferentialBranchField.php:44]
  #1 <#2> DifferentialBranchField::getBranchDescription(DifferentialDiff) called at [<phorge>/src/applications/differential/customfield/DifferentialBranchField.php:35]
  #2 <#2> DifferentialBranchField::renderDiffPropertyViewValue(DifferentialDiff) called at [<phorge>/src/applications/differential/controller/DifferentialRevisionViewController.php:1226]
  #3 <#2> DifferentialRevisionViewController::buildDiffPropertyList(DifferentialDiff, DifferentialRevision, array) called at [<phorge>/src/applications/differential/controller/DifferentialRevisionViewController.php:1188]
  #4 <#2> DifferentialRevisionViewController::buildDiffDetailView(array, DifferentialRevision, PhabricatorCustomFieldList) called at [<phorge>/src/applications/differential/controller/DifferentialRevisionViewController.php:343]
  #5 <#2> DifferentialRevisionViewController::handleRequest(AphrontRequest) called at [<phorge>/src/aphront/configuration/AphrontApplicationConfiguration.php:284]
  #6 phlog(RuntimeException) called at [<phorge>/src/aphront/handler/PhabricatorDefaultRequestExceptionHandler.php:41]
  #7 PhabricatorDefaultRequestExceptionHandler::handleRequestThrowable(AphrontRequest, RuntimeException) called at [<phorge>/src/aphront/configuration/AphrontApplicationConfiguration.php:751]
  #8 AphrontApplicationConfiguration::handleThrowable(RuntimeException) called at [<phorge>/src/aphront/configuration/AphrontApplicationConfiguration.php:296]
  #9 AphrontApplicationConfiguration::processRequest(AphrontRequest, PhutilDeferredLog, AphrontPHPHTTPSink, MultimeterControl) called at [<phorge>/src/aphront/configuration/AphrontApplicationConfiguration.php:203]
  #10 AphrontApplicationConfiguration::runHTTPRequest(AphrontPHPHTTPSink) called at [<phorge>/webroot/index.php:35]

Fix that exception; get next exception:

[2023-05-30 10:40:21] EXCEPTION: (RuntimeException) strlen(): Passing null to parameter #1 ($string) of type string is deprecated at [<arcanist>/src/error/PhutilErrorHandler.php:261]
arcanist(head=master, ref.master=18554ea76ceb), phorge(head=diff3, ref.master=e11c5486c92b, ref.diff3=e11c5486c92b)
  #0 <#2> PhutilErrorHandler::handleError(integer, string, string, integer) called at [<phorge>/src/applications/differential/customfield/DifferentialBranchField.php:46]
  #1 <#2> DifferentialBranchField::getBranchDescription(DifferentialDiff) called at [<phorge>/src/applications/differential/customfield/DifferentialBranchField.php:35]
  #2 <#2> DifferentialBranchField::renderDiffPropertyViewValue(DifferentialDiff) called at [<phorge>/src/applications/differential/controller/DifferentialRevisionViewController.php:1226]
  #3 <#2> DifferentialRevisionViewController::buildDiffPropertyList(DifferentialDiff, DifferentialRevision, array) called at [<phorge>/src/applications/differential/controller/DifferentialRevisionViewController.php:1188]
  #4 <#2> DifferentialRevisionViewController::buildDiffDetailView(array, DifferentialRevision, PhabricatorCustomFieldList) called at [<phorge>/src/applications/differential/controller/DifferentialRevisionViewController.php:343]
  #5 <#2> DifferentialRevisionViewController::handleRequest(AphrontRequest) called at [<phorge>/src/aphront/configuration/AphrontApplicationConfiguration.php:284]
  #6 phlog(RuntimeException) called at [<phorge>/src/aphront/handler/PhabricatorDefaultRequestExceptionHandler.php:41]
  #7 PhabricatorDefaultRequestExceptionHandler::handleRequestThrowable(AphrontRequest, RuntimeException) called at [<phorge>/src/aphront/configuration/AphrontApplicationConfiguration.php:751]
  #8 AphrontApplicationConfiguration::handleThrowable(RuntimeException) called at [<phorge>/src/aphront/configuration/AphrontApplicationConfiguration.php:296]
  #9 AphrontApplicationConfiguration::processRequest(AphrontRequest, PhutilDeferredLog, AphrontPHPHTTPSink, MultimeterControl) called at [<phorge>/src/aphront/configuration/AphrontApplicationConfiguration.php:203]
  #10 AphrontApplicationConfiguration::runHTTPRequest(AphrontPHPHTTPSink) called at [<phorge>/webroot/index.php:35]

Fix that exception; get next exception:

[2023-05-30 10:41:00] EXCEPTION: (RuntimeException) substr(): Passing null to parameter #1 ($string) of type string is deprecated at [<arcanist>/src/error/PhutilErrorHandler.php:261]
arcanist(head=master, ref.master=18554ea76ceb), phorge(head=diff3, ref.master=e11c5486c92b, ref.diff3=e11c5486c92b)
  #0 <#2> PhutilErrorHandler::handleError(integer, string, string, integer) called at [<arcanist>/src/error/PhutilErrorHandler.php:261]
  #1 <#2> substr(NULL, integer, integer) called at [<arcanist>/externals/jsonlint/src/Seld/JsonLint/JsonParser.php:484]
...

That last exception is T15346 so apply D25250. After that, I get more exceptions but they might be unrelated, e.g.:

[2023-05-30 10:50:14] EXCEPTION: (RuntimeException) strcasecmp(): Passing null to parameter #1 ($string1) of type string is deprecated at [<arcanist>/src/error/PhutilErrorHandler.php:261]
arcanist(head=dashbPanels, ref.master=18554ea76ceb, ref.dashbPanels=74cb1dbc5ee3), phorge(head=diff3, ref.master=e11c5486c92b, ref.diff3=e11c5486c92b)
  #0 <#2> PhutilErrorHandler::handleError(integer, string, string, integer) called at [<arcanist>/src/error/PhutilErrorHandler.php:261]
  #1 <#2> strcasecmp(NULL, string) called at [<phorge>/src/infrastructure/javelin/markup.php:77]
  #2 <#2> phabricator_form(PhabricatorUser, array, array) called at [<phorge>/src/applications/differential/view/DifferentialRevisionUpdateHistoryView.php:251]
  #3 <#2> javelin_tag(string, array, PHUITabView) called at [<phorge>/src/view/phui/PHUITabGroupView.php:119]
  #4 <#2> phutil_tag(string, array, array) called at [<phorge>/src/infrastructure/javelin/markup.php:70]
...