From c219ec8fcd2e6d402f3bbb90ceca2613f8e7e90c Mon Sep 17 00:00:00 2001
From: Nathaniel Catchpole <catch@35733.no-reply.drupal.org>
Date: Thu, 4 Jun 2015 15:10:58 +0100
Subject: [PATCH] Issue #2498293 by cilefen, Fabianx: Only allow lowercase
 service and parameter names

---
 .../DependencyInjection/ContainerBuilder.php  | 23 +++++++++++++
 core/lib/Drupal/Core/DrupalKernel.php         |  4 +--
 .../config/src/Tests/DefaultConfigTest.php    |  4 +--
 .../modules/form_test/form_test.routing.yml   |  2 +-
 .../ContainerBuilderTest.php                  | 32 +++++++++++++++++++
 5 files changed, 60 insertions(+), 5 deletions(-)

diff --git a/core/lib/Drupal/Core/DependencyInjection/ContainerBuilder.php b/core/lib/Drupal/Core/DependencyInjection/ContainerBuilder.php
index cb8587857328..d6b1cd628676 100644
--- a/core/lib/Drupal/Core/DependencyInjection/ContainerBuilder.php
+++ b/core/lib/Drupal/Core/DependencyInjection/ContainerBuilder.php
@@ -41,6 +41,9 @@ public function __construct(ParameterBagInterface $parameterBag = NULL) {
    *   services in a frozen builder.
    */
   public function set($id, $service, $scope = self::SCOPE_CONTAINER) {
+    if (strtolower($id) !== $id) {
+      throw new \InvalidArgumentException("Service ID names must be lowercase: $id");
+    }
     SymfonyContainer::set($id, $service, $scope);
 
     // Ensure that the _serviceId property is set on synthetic services as well.
@@ -49,6 +52,26 @@ public function set($id, $service, $scope = self::SCOPE_CONTAINER) {
     }
   }
 
+  /**
+   * {@inheritdoc}
+   */
+  public function register($id, $class = null) {
+    if (strtolower($id) !== $id) {
+      throw new \InvalidArgumentException("Service ID names must be lowercase: $id");
+    }
+    return parent::register($id, $class);
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function setParameter($name, $value) {
+    if (strtolower($name) !== $name) {
+      throw new \InvalidArgumentException("Parameter names must be lowercase: $name");
+    }
+    parent::setParameter($name, $value);
+  }
+
   /**
    * Synchronizes a service change.
    *
diff --git a/core/lib/Drupal/Core/DrupalKernel.php b/core/lib/Drupal/Core/DrupalKernel.php
index 815f7f3387a1..8202cd6077c4 100644
--- a/core/lib/Drupal/Core/DrupalKernel.php
+++ b/core/lib/Drupal/Core/DrupalKernel.php
@@ -977,7 +977,7 @@ protected function initializeRequestGlobals(Request $request) {
    */
   protected function getServicesToPersist(ContainerInterface $container) {
     $persist = array();
-    foreach ($container->getParameter('persistIds') as $id) {
+    foreach ($container->getParameter('persist_ids') as $id) {
       // It's pointless to persist services not yet initialized.
       if ($container->initialized($id)) {
         $persist[$id] = $container->get($id);
@@ -1127,7 +1127,7 @@ protected function compileContainer() {
         $persist_ids[] = $id;
       }
     }
-    $container->setParameter('persistIds', $persist_ids);
+    $container->setParameter('persist_ids', $persist_ids);
 
     $container->compile();
     return $container;
diff --git a/core/modules/config/src/Tests/DefaultConfigTest.php b/core/modules/config/src/Tests/DefaultConfigTest.php
index 99ff07a6d515..9e32a45056fe 100644
--- a/core/modules/config/src/Tests/DefaultConfigTest.php
+++ b/core/modules/config/src/Tests/DefaultConfigTest.php
@@ -53,12 +53,12 @@ protected function setUp() {
    */
   public function containerBuild(ContainerBuilder $container) {
     parent::containerBuild($container);
-    $container->register('DefaultConfigTest.schema_storage')
+    $container->register('default_config_test.schema_storage')
       ->setClass('\Drupal\config_test\TestInstallStorage')
       ->addArgument(InstallStorage::CONFIG_SCHEMA_DIRECTORY);
 
     $definition = $container->getDefinition('config.typed');
-    $definition->replaceArgument(1, new Reference('DefaultConfigTest.schema_storage'));
+    $definition->replaceArgument(1, new Reference('default_config_test.schema_storage'));
   }
 
   /**
diff --git a/core/modules/system/tests/modules/form_test/form_test.routing.yml b/core/modules/system/tests/modules/form_test/form_test.routing.yml
index 140b17c5c310..8a200a3fc213 100644
--- a/core/modules/system/tests/modules/form_test/form_test.routing.yml
+++ b/core/modules/system/tests/modules/form_test/form_test.routing.yml
@@ -15,7 +15,7 @@ form_test.route2:
 form_test.route3:
   path: '/form-test/object-service-builder'
   defaults:
-    _form: 'form_test.form.serviceForm'
+    _form: 'form_test.form.serviceform'
   requirements:
     _access: 'TRUE'
 
diff --git a/core/tests/Drupal/Tests/Core/DependencyInjection/ContainerBuilderTest.php b/core/tests/Drupal/Tests/Core/DependencyInjection/ContainerBuilderTest.php
index 8a93b6d4da00..0df17c44e883 100644
--- a/core/tests/Drupal/Tests/Core/DependencyInjection/ContainerBuilderTest.php
+++ b/core/tests/Drupal/Tests/Core/DependencyInjection/ContainerBuilderTest.php
@@ -38,4 +38,36 @@ public function testSet() {
     $this->assertEquals('bar', $class->_serviceId);
   }
 
+  /**
+   * @covers ::set
+   * @expectedException \InvalidArgumentException
+   * @expectedExceptionMessage Service ID names must be lowercase: Bar
+   */
+  public function testSetException() {
+    $container = new ContainerBuilder();
+    $class = new BarClass();
+    $container->set('Bar', $class);
+    $this->assertNotEquals('bar', $class->_serviceId);
+  }
+
+  /**
+   * @covers ::setParameter
+   * @expectedException \InvalidArgumentException
+   * @expectedExceptionMessage Parameter names must be lowercase: Buzz
+   */
+  public function testSetParameterException() {
+    $container = new ContainerBuilder();
+    $container->setParameter('Buzz', 'buzz');
+  }
+
+  /**
+   * @covers ::register
+   * @expectedException \InvalidArgumentException
+   * @expectedExceptionMessage Service ID names must be lowercase: Bar
+   */
+  public function testRegisterException() {
+    $container = new ContainerBuilder();
+    $container->register('Bar');
+  }
+
 }
-- 
GitLab