From 7c1487e4dcfab19e0ef42cd4596780a37e0c8c4e Mon Sep 17 00:00:00 2001 From: Andre Klapper Date: Mon, 19 Jun 2023 14:10:29 +0200 Subject: [PATCH] Fix Pholio RuntimeException: Undefined variable $dictionary (when adding an empty Inline Comment) Summary: Trying to create an empty inline comment in a Pholio mock, `$dictionary` does not get set as both `strlen($v_content)` and `$inline->getID()` are not true. Thus show a more explanatory error message ('Comment cannot be empty.') to users instead of exposing internal variable names. ``` EXCEPTION: (RuntimeException) Undefined variable $dictionary at [/src/error/PhutilErrorHandler.php:261] arcanist(head=master, ref.master=b325304b6e52), phorge(head=master, ref.master=980293b707a0) #0 <#2> PhutilErrorHandler::handleError(integer, string, string, integer) called at [/src/applications/pholio/controller/PholioInlineController.php:117] ``` Closes T15456 Test Plan: After applying this change, try to add an empty Inline Comment in a Pholio mock. See that the error message is now "Comment cannot be empty." instead of "Undefined variable $dictionary". Reviewers: O1 Blessed Committers, valerio.bozzolan Reviewed By: O1 Blessed Committers, valerio.bozzolan Subscribers: speck, tobiaswiese, valerio.bozzolan, Matthew, Cigaryno Maniphest Tasks: T15456 Differential Revision: https://we.phorge.it/D25281 --- .../pholio/controller/PholioInlineController.php | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/src/applications/pholio/controller/PholioInlineController.php b/src/applications/pholio/controller/PholioInlineController.php index ddced1f9eb..2201e97f74 100644 --- a/src/applications/pholio/controller/PholioInlineController.php +++ b/src/applications/pholio/controller/PholioInlineController.php @@ -102,6 +102,7 @@ final class PholioInlineController extends PholioController { ->addCancelButton($mock_uri, pht('Close')); } + $error = null; if ($request->isFormPost()) { $v_content = $request->getStr('content'); @@ -112,9 +113,13 @@ final class PholioInlineController extends PholioController { } else if ($inline->getID()) { $inline->delete(); $dictionary = array(); + } else { + $error = pht('Comment cannot be empty.'); } - return id(new AphrontAjaxResponse())->setContent($dictionary); + if ($error === null) { + return id(new AphrontAjaxResponse())->setContent($dictionary); + } } switch ($mode) { @@ -151,6 +156,7 @@ final class PholioInlineController extends PholioController { ->setUser($viewer) ->setName('content') ->setLabel(pht('Comment')) + ->setError($error) ->setValue($v_content)); return $this->newDialog()