소스 검색

ZF-9110: prevent recursion in bootstrap when setting environment

git-svn-id: http://framework.zend.com/svn/framework/standard/trunk@20987 44c647ce-9c0f-0410-b52a-842ac1e357ba
matthew 16 년 전
부모
커밋
527e26133f
2개의 변경된 파일13개의 추가작업 그리고 0개의 파일을 삭제
  1. 3 0
      library/Zend/Application/Bootstrap/BootstrapAbstract.php
  2. 10 0
      tests/Zend/Application/Bootstrap/BootstrapAbstractTest.php

+ 3 - 0
library/Zend/Application/Bootstrap/BootstrapAbstract.php

@@ -433,6 +433,9 @@ abstract class Zend_Application_Bootstrap_BootstrapAbstract
         if (($application instanceof Zend_Application)
             || ($application instanceof Zend_Application_Bootstrap_Bootstrapper)
         ) {
+            if ($application === $this) {
+                throw new Zend_Application_Bootstrap_Exception('Cannot set application to same object; creates recursion');
+            }
             $this->_application = $application;
         } else {
             throw new Zend_Application_Bootstrap_Exception('Invalid application provided to bootstrap constructor (received "' . get_class($application) . '" instance)');

+ 10 - 0
tests/Zend/Application/Bootstrap/BootstrapAbstractTest.php

@@ -719,6 +719,16 @@ class Zend_Application_Bootstrap_BootstrapAbstractTest extends PHPUnit_Framework
         $actual   = $bootstrap->getOptionKeys();
         $this->assertEquals($expected, $actual);
     }
+
+    /**
+     * @group ZF-9110
+     * @expectedException Zend_Application_Bootstrap_Exception
+     */
+    public function testPassingSameBootstrapAsApplicationShouldNotCauseRecursion()
+    {
+        $bootstrap = new Zend_Application_Bootstrap_Bootstrap($this->application);
+        $bootstrap->setApplication($bootstrap);
+    }
 }
 
 class Zend_Application_Bootstrap_BootstrapAbstractTest_View