From b8c09bea472a4ca8e007b3d96d2abb6fff90a6b8 Mon Sep 17 00:00:00 2001 From: Alex Pott Date: Mon, 7 May 2018 21:11:35 +0100 Subject: [PATCH] Issue #2594669 by Wim Leers, borisson_, catch, dawehner: LibraryDependencyResolver::getMinimalRepresentativeSubset() accepts a set as the input but doesn't complain if it's not actually a set --- core/lib/Drupal/Core/Asset/LibraryDependencyResolver.php | 2 ++ core/modules/system/system.module | 4 ++-- .../Tests/Core/Asset/LibraryDependencyResolverTest.php | 8 ++++++++ 3 files changed, 12 insertions(+), 2 deletions(-) diff --git a/core/lib/Drupal/Core/Asset/LibraryDependencyResolver.php b/core/lib/Drupal/Core/Asset/LibraryDependencyResolver.php index 95fca186614..b84b8fac9ef 100644 --- a/core/lib/Drupal/Core/Asset/LibraryDependencyResolver.php +++ b/core/lib/Drupal/Core/Asset/LibraryDependencyResolver.php @@ -65,6 +65,8 @@ class LibraryDependencyResolver implements LibraryDependencyResolverInterface { * {@inheritdoc} */ public function getMinimalRepresentativeSubset(array $libraries) { + assert(count($libraries) === count(array_unique($libraries)), '$libraries can\'t contain duplicate items.'); + $minimal = []; // Determine each library's dependencies. diff --git a/core/modules/system/system.module b/core/modules/system/system.module index d08e1016c81..15138a10e57 100644 --- a/core/modules/system/system.module +++ b/core/modules/system/system.module @@ -766,10 +766,10 @@ function system_js_settings_alter(&$settings, AttachedAssetsInterface $assets) { } // Provide the page with information about the individual asset libraries // used, information not otherwise available when aggregation is enabled. - $minimal_libraries = $library_dependency_resolver->getMinimalRepresentativeSubset(array_merge( + $minimal_libraries = $library_dependency_resolver->getMinimalRepresentativeSubset(array_unique(array_merge( $assets->getLibraries(), $assets->getAlreadyLoadedLibraries() - )); + ))); sort($minimal_libraries); $settings['ajaxPageState']['libraries'] = implode(',', $minimal_libraries); } diff --git a/core/tests/Drupal/Tests/Core/Asset/LibraryDependencyResolverTest.php b/core/tests/Drupal/Tests/Core/Asset/LibraryDependencyResolverTest.php index 40e18210800..6e499d9eaae 100644 --- a/core/tests/Drupal/Tests/Core/Asset/LibraryDependencyResolverTest.php +++ b/core/tests/Drupal/Tests/Core/Asset/LibraryDependencyResolverTest.php @@ -169,4 +169,12 @@ class LibraryDependencyResolverTest extends UnitTestCase { $this->assertEquals($expected, $this->libraryDependencyResolver->getMinimalRepresentativeSubset($libraries)); } + /** + * @covers ::getMinimalRepresentativeSubset + */ + public function testGetMinimalRepresentativeSubsetInvalidInput() { + $this->setExpectedException(\AssertionError::class, '$libraries can\'t contain duplicate items.'); + $this->libraryDependencyResolver->getMinimalRepresentativeSubset(['test/no_deps_a', 'test/no_deps_a']); + } + }