@recaptime-dev's working patches + fork for Phorge, a community fork of Phabricator. (Upstream dev and stable branches are at upstream/main and upstream/stable respectively.) hq.recaptime.dev/wiki/Phorge
phorge phabricator
1
fork

Configure Feed

Select the types of activity you want to include in your feed.

Fix "Undefined index" exception setting Meme text

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.

```
EXCEPTION: (RuntimeException) Undefined index: above at [<arcanist>/src/error/PhutilErrorHandler.php:251]
arcanist(), phorge()
#0 <#2> PhutilErrorHandler::handleError(integer, string, string, integer, array) called at [<phorge>/src/applications/macro/engine/PhabricatorMemeEngine.php:276]
```

Closes T15637

Test Plan:
Create a meme called "angrycat" from the /macro/ page, and try a comment like this, expecting no nuclear implosion:

{meme, src=angrycat, below=}
{meme, src=angrycat, above=}
{meme, src=angrycat, below=, above=}
{meme, src=angrycat, below= , above= }
{meme, src=angrycat, below=asd}
{meme, src=angrycat, above=asd}
{meme, src=angrycat, above=asd, below=dsa}
{meme, src=angrycat, above= asd , below= dsa }

Also carefully read the code with your big eyes, keeping in mind that strlen does not accept passing `null` in PHP 8, and looking at what we did in rPb4cfe56f03b44615ac9251aed8d74bf13b085051.

Reviewers: O1 Blessed Committers, valerio.bozzolan

Reviewed By: O1 Blessed Committers, valerio.bozzolan

Subscribers: tobiaswiese, valerio.bozzolan, Matthew, Cigaryno

Maniphest Tasks: T15637

Differential Revision: https://we.phorge.it/D25437

+2 -2
+2 -2
src/applications/macro/engine/PhabricatorMemeEngine.php
··· 273 273 $size = $metrics['size']; 274 274 275 275 $above = $this->getAboveText(); 276 - if (strlen($above)) { 276 + if ($above !== null && phutil_nonempty_string(trim($above))) { 277 277 $x = (int)floor(($dx - $metrics['text']['above']['width']) / 2); 278 278 $y = $metrics['text']['above']['height'] + 12; 279 279 ··· 281 281 } 282 282 283 283 $below = $this->getBelowText(); 284 - if (strlen($below)) { 284 + if ($below !== null && phutil_nonempty_string(trim($below))) { 285 285 $x = (int)floor(($dx - $metrics['text']['below']['width']) / 2); 286 286 $y = $dy - 12 - $metrics['text']['below']['descend']; 287 287