diff --git a/core/lib/Drupal/Core/Config/Config.php b/core/lib/Drupal/Core/Config/Config.php index 742a7dc..c1f0632 100644 --- a/core/lib/Drupal/Core/Config/Config.php +++ b/core/lib/Drupal/Core/Config/Config.php @@ -435,7 +435,7 @@ public function load() { */ public function save() { // Validate the configuration object name before saving. - Config::validateName($this->name); + static::validateName($this->name); if (!$this->isLoaded) { $this->load(); } diff --git a/core/modules/config/lib/Drupal/config/Tests/ConfigCRUDTest.php b/core/modules/config/lib/Drupal/config/Tests/ConfigCRUDTest.php index e7a6db7..e648184 100644 --- a/core/modules/config/lib/Drupal/config/Tests/ConfigCRUDTest.php +++ b/core/modules/config/lib/Drupal/config/Tests/ConfigCRUDTest.php @@ -112,8 +112,7 @@ function testNameValidation() { $name = 'nonamespace'; $message = 'Expected ConfigNameException was thrown for a name without a namespace.'; try { - $config = config($name); - $config->save(); + config($name)->save(); $this->fail($message); } catch (ConfigNameException $e) { @@ -124,8 +123,7 @@ function testNameValidation() { $name = 'config_test.herman_melville.moby_dick_or_the_whale.harper_1851.now_small_fowls_flew_screaming_over_the_yet_yawning_gulf_a_sullen_white_surf_beat_against_its_steep_sides_then_all_collapsed_and_the_great_shroud_of_the_sea_rolled_on_as_it_rolled_five_thousand_years_ago'; $message = 'Expected ConfigNameException was thrown for a name longer than Config::MAX_NAME_LENGTH.'; try { - $config = config($name); - $config->save(); + config($name)->save(); $this->fail($message); } catch (ConfigNameException $e) { @@ -144,7 +142,7 @@ function testNameValidation() { unset($test_characters[$i]); } } - $this->assertTrue(empty($test_characters), format_string('ConfigNameException was thrown for all invalid name characters: @characters', array( + $this->assertTrue(empty($test_characters), format_string('Expected ConfigNameException was thrown for all invalid name characters: @characters', array( '@characters' => implode(' ', $characters), ))); @@ -159,6 +157,34 @@ function testNameValidation() { catch (\Exception $e) { $this->fail($message); } + + // Verify an exception is thrown when importing configuration with an + // invalid name. + $message = 'Expected ConfigNameException was thrown when attempting to install invalid configuration.'; + try { + $this->enableModules(array('config_test_invalid')); + $this->fail($message); + } + catch (ConfigNameException $e) { + $this->pass($message); + } + + // Write configuraiton with an invalid name to staging. + $storage = $this->container->get('config.storage'); + $staging = $this->container->get('config.storage.staging'); + $manifest_data = config('manifest.invalid')->get(); + $manifest_data['new']['name'] = 'invalid'; + $staging->write('manifest.invalid', $manifest_data); + + // Verify that an exception is thrown when synchronizing. + $message = 'Expected ConfigNameException was thrown when attempting to sync invalid configuration.'; + try { + config_import(); + $this->fail($message); + } + catch (ConfigNameException $e) { + $this->pass($message); + } } } diff --git a/core/modules/config/tests/config_test_invalid/config/invalid.yml b/core/modules/config/tests/config_test_invalid/config/invalid.yml new file mode 100644 index 0000000..f3f2ba0 --- /dev/null +++ b/core/modules/config/tests/config_test_invalid/config/invalid.yml @@ -0,0 +1 @@ +frittata: potato diff --git a/core/modules/config/tests/config_test_invalid/config_test_invalid.info b/core/modules/config/tests/config_test_invalid/config_test_invalid.info new file mode 100644 index 0000000..560a772 --- /dev/null +++ b/core/modules/config/tests/config_test_invalid/config_test_invalid.info @@ -0,0 +1,5 @@ +name = Test module with invalid configuration +package = Core +version = VERSION +core = 8.x +hidden = TRUE diff --git a/core/modules/config/tests/config_test_invalid/config_test_invalid.module b/core/modules/config/tests/config_test_invalid/config_test_invalid.module new file mode 100644 index 0000000..81cdae6 --- /dev/null +++ b/core/modules/config/tests/config_test_invalid/config_test_invalid.module @@ -0,0 +1,6 @@ +