Project

General

Profile

Actions

Bug #90318

closed

stdWrap.ifEmpty not called anymore on potentially empty strings

Added by Francois Suter about 4 years ago. Updated almost 4 years ago.

Status:
Closed
Priority:
Must have
Assignee:
-
Category:
Frontend
Start date:
2020-02-04
Due date:
% Done:

100%

Estimated time:
TYPO3 Version:
9
PHP Version:
7.3
Tags:
Complexity:
easy
Is Regression:
Yes
Sprint Focus:

Description

In https://review.typo3.org/c/Packages/TYPO3.CMS/+/58928 an optimization was introduced to avoid calling "ifEmpty" or "ifBlank" if the content is not empty. However this is wrongly evaluated for "ifEmpty".

Indeed "ifEmpty" bases itself on the PHP function "trim" which considers:


    " " (ASCII 32 (0x20)), an ordinary space.
    "\t" (ASCII 9 (0x09)), a tab.
    "\n" (ASCII 10 (0x0A)), a new line (line feed).
    "\r" (ASCII 13 (0x0D)), a carriage return.
    "\0" (ASCII 0 (0x00)), the NUL-byte.
    "\x0B" (ASCII 11 (0x0B)), a vertical tab.


as empty characters. But the check that was introduced about whether to call "ifEmpty" or not checks emptiness with the "empty" PHP function which considers:

    "" (an empty string)
    0 (0 as an integer)
    0.0 (0 as a float)
    "0" (0 as a string)
    NULL
    FALSE
    array() (an empty array)


as empty elements. This is very different from "trim" (excerpts taken from the PHP manual).

I would say the proper check should be:

$functionName === 'ifEmpty' && trim($content) !== ''


Related issues 2 (0 open2 closed)

Related to TYPO3 Core - Bug #86969: stdWrap ifEmpty/ifNull/ifBlank are evaluated even if content is thereClosed2018-11-21

Actions
Related to TYPO3 Core - Bug #90908: Zeros are not treated as empty values in `.ifEmpty`Closed2020-03-31

Actions
Actions #1

Updated by Francois Suter about 4 years ago

  • Related to Bug #86969: stdWrap ifEmpty/ifNull/ifBlank are evaluated even if content is there added
Actions #2

Updated by Francois Suter about 4 years ago

Instructions for testing. Add the following TS to your template:

page.5 = TEXT
page.5 {
  value (

  )
  ifEmpty.override.cObject = TEXT
  ifEmpty.override.cObject.value = EMPTY!
  wrap = <p>|</p>
}

Without the patch, you will see a paragraph with a lot of empty spaces when looking at the HTML source. After the patch, the text "EMPTY!" appears.

Actions #3

Updated by Gerrit Code Review about 4 years ago

  • Status changed from New to Under Review

Patch set 1 for branch master of project Packages/TYPO3.CMS has been pushed to the review server.
It is available at https://review.typo3.org/c/Packages/TYPO3.CMS/+/63175

Actions #4

Updated by Gerrit Code Review about 4 years ago

Patch set 1 for branch 9.5 of project Packages/TYPO3.CMS has been pushed to the review server.
It is available at https://review.typo3.org/c/Packages/TYPO3.CMS/+/63457

Actions #5

Updated by Anonymous about 4 years ago

  • Status changed from Under Review to Resolved
  • % Done changed from 0 to 100
Actions #6

Updated by Sascha Egerer about 4 years ago

  • Related to Bug #90908: Zeros are not treated as empty values in `.ifEmpty` added
Actions #7

Updated by Benni Mack about 4 years ago

  • Status changed from Resolved to Closed
Actions #8

Updated by Helmut Hummel almost 4 years ago

Francois Suter wrote:

Indeed "ifEmpty" bases itself on the PHP function "trim" which considers:

That assumption is different from what is documented:

https://docs.typo3.org/m/typo3/reference-typoscript/master/en-us/Functions/Stdwrap.html?highlight=ifempty#ifempty

Documentation says: "Zeros are treated as empty values!"

Which means, the changes applied with this change introduced a regression

Actions

Also available in: Atom PDF