diff --git a/core/lib/Drupal/Core/Asset/LibraryDependencyResolver.php b/core/lib/Drupal/Core/Asset/LibraryDependencyResolver.php index 95fca186614fc944976b059e7083913acafb73ec..e4c5d6d15cce3dcdb910bd200db94c693966abb7 100644 --- a/core/lib/Drupal/Core/Asset/LibraryDependencyResolver.php +++ b/core/lib/Drupal/Core/Asset/LibraryDependencyResolver.php @@ -65,6 +65,8 @@ protected function doGetDependencies(array $libraries_with_unresolved_dependenci * {@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 d08e1016c816ccc0d887f573cdd2b5f3a313f0b6..15138a10e574163de07ce56628fa6ab9833c4a1a 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 40e18210800ba981de63faec7509b5236abc9ceb..6e499d9eaaeadc526f8e901e5bdacf148d80405d 100644 --- a/core/tests/Drupal/Tests/Core/Asset/LibraryDependencyResolverTest.php +++ b/core/tests/Drupal/Tests/Core/Asset/LibraryDependencyResolverTest.php @@ -169,4 +169,12 @@ public function testGetMinimalRepresentativeSubset(array $libraries, array $expe $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']); + } + }