Bug #62553

Exception when accessing empty ObjectStorage property via numeric index

Added by Mathias Brodala over 6 years ago. Updated over 2 years ago.

Status:
Closed
Priority:
Must have
Category:
Extbase
Target version:
Start date:
2014-10-30
Due date:
% Done:

100%

Estimated time:
TYPO3 Version:
6.2
PHP Version:
5.3
Tags:
Complexity:
Is Regression:
No
Sprint Focus:

Description

Imagine a snippet like this within a Fluid template:

{product.images.0.title}

Given the images property is an ObjectStorage and empty, a warning exception is thrown:

#1: PHP Warning: spl_object_hash() expects parameter 1 to be object, string given in /var/www/typo3_src/typo3/sysext/extbase/Classes/Persistence/ObjectStorage.php line 160

This is caused by the following steps:

  1. Fluid parser calls \TYPO3\CMS\Fluid\Core\Parser\SyntaxTree\ObjectAccessorNode::getPropertyPath
  2. The property "0" is not found via \TYPO3\CMS\Extbase\Reflection\ObjectAccess::getPropertyInternal
  3. The array check yields TRUE (ObjectStorage implements the \ArrayAccess interface)
  4. isset($subject[$pathSegment]) is called
  5. ObjectStorage::offsetExists is called with "0" as argument
  6. The call to spl_object_hash("0") causes the warning

I am not sure who is at fault here but I can say the following:

  • Accessing a non-existing property in Fluid should never trigger an error
  • Implementing the \ArrayAccess interface means a promise to be capable of handling the only two natively supported index types string and integer

Attached is a patch which performs a simple check via is_object.


Files

objectstorage-offsetexists-check-object.patch (612 Bytes) objectstorage-offsetexists-check-object.patch Fix isset() call on ObjectStorage with numeric index Mathias Brodala, 2014-10-30 11:26
objectstorage-offsetexists-check-object.patch (1.66 KB) objectstorage-offsetexists-check-object.patch Fix + Unit tests Mathias Brodala, 2014-10-30 11:36
#2

Updated by Gerrit Code Review over 6 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 http://review.typo3.org/33615

#3

Updated by Gerrit Code Review over 6 years ago

Patch set 2 for branch master of project Packages/TYPO3.CMS has been pushed to the review server.
It is available at http://review.typo3.org/33615

#4

Updated by Gerrit Code Review over 6 years ago

Patch set 1 for branch TYPO3_6-2 of project Packages/TYPO3.CMS has been pushed to the review server.
It is available at http://review.typo3.org/34433

#5

Updated by Mathias Brodala over 6 years ago

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

Updated by Benni Mack over 2 years ago

  • Status changed from Resolved to Closed

Also available in: Atom PDF