Problem/Motivation

ContentEntityStorageBase::loadRevision called with a NULL as parameter for the revision id will return an entity, which is wrong and should not happen as it might return an entity where no entity should be returned, which might happen lets say through a developer error.

ContentEntityStorageBase::loadRevision is calling SqlContentEntityStorageBase::doLoadRevisionFieldItems, which on its turn calls SqlContentEntityStorageBase::buildQuery([], $revision_id). However the buildQuery method is implemented this way that it will put a condition for the given revision id only if the parameter evaluates as TRUE otherwise without any conditions the query will return all the entities.

Proposed resolution

EntityStorageBase::load should check that the provided ID is different than NULL.

ContentEntityStorageBase::loadRevision should check that the provided revision ID evaluates to TRUE.

Remaining tasks

Review

User interface changes

none

API changes

none

Data model changes

none

Comments

Maouna created an issue. See original summary.

Maouna’s picture

StatusFileSize
new1.14 KB

Here is a test for demonstration:

Maouna’s picture

Status: Active » Needs review

Status: Needs review » Needs work

The last submitted patch, 2: 2762737-loadRevision-2-failing.patch, failed testing.

Maouna’s picture

Version: 8.1.x-dev » 8.2.x-dev
Status: Needs work » Needs review

Same for 8.2.x

Maouna’s picture

Status: Needs review » Needs work
Maouna’s picture

Assigned: Maouna » Unassigned
hchonov’s picture

Status: Needs work » Needs review
StatusFileSize
new2.62 KB
new1.22 KB

Status: Needs review » Needs work

The last submitted patch, 8: 2762737-8.patch, failed testing.

hchonov’s picture

Status: Needs work » Needs review
StatusFileSize
new2.63 KB
new1.42 KB
hchonov’s picture

Issue summary: View changes
hchonov’s picture

Issue summary: View changes
StatusFileSize
new2.37 KB
new1.24 KB

Version: 8.2.x-dev » 8.3.x-dev

Drupal 8.2.0-beta1 was released on August 3, 2016, which means new developments and disruptive changes should now be targeted against the 8.3.x-dev branch. For more information see the Drupal 8 minor version schedule and the Allowed changes during the Drupal 8 release cycle.

Version: 8.3.x-dev » 8.4.x-dev

Drupal 8.3.0-alpha1 will be released the week of January 30, 2017, which means new developments and disruptive changes should now be targeted against the 8.4.x-dev branch. For more information see the Drupal 8 minor version schedule and the Allowed changes during the Drupal 8 release cycle.

Version: 8.4.x-dev » 8.5.x-dev

Drupal 8.4.0-alpha1 will be released the week of July 31, 2017, which means new developments and disruptive changes should now be targeted against the 8.5.x-dev branch. For more information see the Drupal 8 minor version schedule and the Allowed changes during the Drupal 8 release cycle.

Version: 8.5.x-dev » 8.6.x-dev

Drupal 8.5.0-alpha1 will be released the week of January 17, 2018, which means new developments and disruptive changes should now be targeted against the 8.6.x-dev branch. For more information see the Drupal 8 minor version schedule and the Allowed changes during the Drupal 8 release cycle.

Version: 8.6.x-dev » 8.7.x-dev

Drupal 8.6.0-alpha1 will be released the week of July 16, 2018, which means new developments and disruptive changes should now be targeted against the 8.7.x-dev branch. For more information see the Drupal 8 minor version schedule and the Allowed changes during the Drupal 8 release cycle.

Version: 8.7.x-dev » 8.8.x-dev

Drupal 8.7.0-alpha1 will be released the week of March 11, 2019, which means new developments and disruptive changes should now be targeted against the 8.8.x-dev branch. For more information see the Drupal 8 minor version schedule and the Allowed changes during the Drupal 8 release cycle.

Version: 8.8.x-dev » 8.9.x-dev

Drupal 8.8.0-alpha1 will be released the week of October 14th, 2019, which means new developments and disruptive changes should now be targeted against the 8.9.x-dev branch. (Any changes to 8.9.x will also be committed to 9.0.x in preparation for Drupal 9’s release, but some changes like significant feature additions will be deferred to 9.1.x.). For more information see the Drupal 8 and 9 minor version schedule and the Allowed changes during the Drupal 8 and 9 release cycles.

Version: 8.9.x-dev » 9.1.x-dev

Drupal 8.9.0-beta1 was released on March 20, 2020. 8.9.x is the final, long-term support (LTS) minor release of Drupal 8, which means new developments and disruptive changes should now be targeted against the 9.1.x-dev branch. For more information see the Drupal 8 and 9 minor version schedule and the Allowed changes during the Drupal 8 and 9 release cycles.

Version: 9.1.x-dev » 9.2.x-dev

Drupal 9.1.0-alpha1 will be released the week of October 19, 2020, which means new developments and disruptive changes should now be targeted for the 9.2.x-dev branch. For more information see the Drupal 9 minor version schedule and the Allowed changes during the Drupal 9 release cycle.

jhedstrom’s picture

Status: Needs review » Closed (duplicate)

This appears to have been fixed as part of #1730874: Add support for loading multiple revisions at once. However, it does still throw the very unhelpful notice that ::load used to throw if a null id was passed:

PHP Warning:  array_flip(): Can only flip STRING and INTEGER values! in /var/www/build/docroot/core/lib/Drupal/Core/Entity/ContentEntityStorageBase.php on line 573

but that can probably be addressed in #3037956: Improve DX of load / loadMultiple / loadRevisionload / loadMultipleRevisions.