Project

General

Profile

Actions

Bug #62553

closed

Exception when accessing empty ObjectStorage property via numeric index

Added by Mathias Brodala about 10 years ago. Updated about 6 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
Actions

Also available in: Atom PDF