25 self::$templates =
array(
26 '1_basic1' =>
'{{ obj.foo }}',
27 '1_basic2' =>
'{{ name|upper }}',
28 '1_basic3' =>
'{% if name %}foo{% endif %}',
29 '1_basic4' =>
'{{ obj.bar }}',
30 '1_basic5' =>
'{{ obj }}',
31 '1_basic6' =>
'{{ arr.obj }}',
32 '1_basic7' =>
'{{ cycle(["foo","bar"], 1) }}',
33 '1_basic8' =>
'{{ obj.getfoobar }}{{ obj.getFooBar }}',
34 '1_basic9' =>
'{{ obj.foobar }}{{ obj.fooBar }}',
35 '1_basic' =>
'{% if obj.foo %}{{ obj.foo|upper }}{% endif %}',
36 '1_layout' =>
'{% block content %}{% endblock %}',
37 '1_child' =>
"{% extends \"1_layout\" %}\n{% block content %}\n{{ \"a\"|json_encode }}\n{% endblock %}",
38 '1_include' =>
'{{ include("1_basic1", sandboxed=true) }}',
39 '1_range_operator' =>
'{{ (1..2)[0] }}',
50 $twig->loadTemplate(
'1_child')->render(
array());
56 $this->assertEquals(
'FOO', $twig->loadTemplate(
'1_basic')->render(
self::$params),
'Sandbox does nothing if it is disabled globally');
64 $this->fail(
'Sandbox throws a SecurityError exception if an unallowed method is called');
66 $this->assertInstanceOf(
'Twig_Sandbox_SecurityNotAllowedMethodError', $e,
'Exception should be an instance of Twig_Sandbox_SecurityNotAllowedMethodError');
67 $this->assertEquals(
'FooObject', $e->getClassName(),
'Exception should be raised on the "FooObject" class');
68 $this->assertEquals(
'foo', $e->getMethodName(),
'Exception should be raised on the "foo" method');
77 $this->fail(
'Sandbox throws a SecurityError exception if an unallowed filter is called');
79 $this->assertInstanceOf(
'Twig_Sandbox_SecurityNotAllowedFilterError', $e,
'Exception should be an instance of Twig_Sandbox_SecurityNotAllowedFilterError');
80 $this->assertEquals(
'upper', $e->getFilterName(),
'Exception should be raised on the "upper" filter');
89 $this->fail(
'Sandbox throws a SecurityError exception if an unallowed tag is used in the template');
91 $this->assertInstanceOf(
'Twig_Sandbox_SecurityNotAllowedTagError', $e,
'Exception should be an instance of Twig_Sandbox_SecurityNotAllowedTagError');
92 $this->assertEquals(
'if', $e->getTagName(),
'Exception should be raised on the "if" tag');
101 $this->fail(
'Sandbox throws a SecurityError exception if an unallowed property is called in the template');
103 $this->assertInstanceOf(
'Twig_Sandbox_SecurityNotAllowedPropertyError', $e,
'Exception should be an instance of Twig_Sandbox_SecurityNotAllowedPropertyError');
104 $this->assertEquals(
'FooObject', $e->getClassName(),
'Exception should be raised on the "FooObject" class');
105 $this->assertEquals(
'bar', $e->getPropertyName(),
'Exception should be raised on the "bar" property');
114 $this->fail(
'Sandbox throws a SecurityError exception if an unallowed method (__toString()) is called in the template');
116 $this->assertInstanceOf(
'Twig_Sandbox_SecurityNotAllowedMethodError', $e,
'Exception should be an instance of Twig_Sandbox_SecurityNotAllowedMethodError');
117 $this->assertEquals(
'FooObject', $e->getClassName(),
'Exception should be raised on the "FooObject" class');
118 $this->assertEquals(
'__tostring', $e->getMethodName(),
'Exception should be raised on the "__toString" method');
127 $this->fail(
'Sandbox throws a SecurityError exception if an unallowed method (__toString()) is called in the template');
129 $this->assertInstanceOf(
'Twig_Sandbox_SecurityNotAllowedMethodError', $e,
'Exception should be an instance of Twig_Sandbox_SecurityNotAllowedMethodError');
130 $this->assertEquals(
'FooObject', $e->getClassName(),
'Exception should be raised on the "FooObject" class');
131 $this->assertEquals(
'__tostring', $e->getMethodName(),
'Exception should be raised on the "__toString" method');
140 $this->fail(
'Sandbox throws a SecurityError exception if an unallowed function is called in the template');
142 $this->assertInstanceOf(
'Twig_Sandbox_SecurityNotAllowedFunctionError', $e,
'Exception should be an instance of Twig_Sandbox_SecurityNotAllowedFunctionError');
143 $this->assertEquals(
'cycle', $e->getFunctionName(),
'Exception should be raised on the "cycle" function');
151 $twig->loadTemplate(
'1_range_operator')->render(
self::$params);
152 $this->fail(
'Sandbox throws a SecurityError exception if the unallowed range operator is called');
154 $this->assertInstanceOf(
'Twig_Sandbox_SecurityNotAllowedFunctionError', $e,
'Exception should be an instance of Twig_Sandbox_SecurityNotAllowedFunctionError');
155 $this->assertEquals(
'range', $e->getFunctionName(),
'Exception should be raised on the "range" function');
163 $this->assertEquals(
'foo', $twig->loadTemplate(
'1_basic1')->render(
self::$params),
'Sandbox allow some methods');
171 $this->assertEquals(
'foo', $twig->loadTemplate(
'1_basic5')->render(
self::$params),
'Sandbox allow some methods');
172 $this->assertEquals(1,
FooObject::$called[
'__toString'],
'Sandbox only calls method once');
179 $this->assertEquals(
'foo', $twig->loadTemplate(
'1_basic5')->render(
self::$params),
'Sandbox allows __toString when sandbox disabled');
180 $this->assertEquals(1,
FooObject::$called[
'__toString'],
'Sandbox only calls method once');
186 $this->assertEquals(
'FABIEN', $twig->loadTemplate(
'1_basic2')->render(
self::$params),
'Sandbox allow some filters');
192 $this->assertEquals(
'foo', $twig->loadTemplate(
'1_basic3')->render(
self::$params),
'Sandbox allow some tags');
198 $this->assertEquals(
'bar', $twig->loadTemplate(
'1_basic4')->render(
self::$params),
'Sandbox allow some properties');
204 $this->assertEquals(
'bar', $twig->loadTemplate(
'1_basic7')->render(
self::$params),
'Sandbox allow some functions');
210 $this->assertEquals(
'1', $twig->loadTemplate(
'1_range_operator')->render(
self::$params),
'Sandbox allow the range operator');
215 foreach (
array(
'getfoobar',
'getFoobar',
'getFooBar') as
$name) {
218 $this->assertEquals(
'foobarfoobar', $twig->loadTemplate(
'1_basic8')->render(
self::$params),
'Sandbox allow methods in a case-insensitive way');
219 $this->assertEquals(2,
FooObject::$called[
'getFooBar'],
'Sandbox only calls method once');
221 $this->assertEquals(
'foobarfoobar', $twig->loadTemplate(
'1_basic9')->render(
self::$params),
'Sandbox allow methods via shortcut names (ie. without get/set)');
227 self::$templates =
array(
228 '2_basic' =>
'{{ obj.foo }}{% include "2_included" %}{{ obj.foo }}',
229 '2_included' =>
'{% if obj.foo %}{{ obj.foo|upper }}{% endif %}',
233 $this->assertEquals(
'fooFOOfoo', $twig->loadTemplate(
'2_basic')->render(
self::$params),
'Sandbox does nothing if disabled globally and sandboxed not used for the include');
235 self::$templates =
array(
236 '3_basic' =>
'{{ obj.foo }}{% sandbox %}{% include "3_included" %}{% endsandbox %}{{ obj.foo }}',
237 '3_included' =>
'{% if obj.foo %}{{ obj.foo|upper }}{% endif %}',
243 $this->fail(
'Sandbox throws a SecurityError exception when the included file is sandboxed');
245 $this->assertInstanceOf(
'Twig_Sandbox_SecurityNotAllowedTagError', $e,
'Exception should be an instance of Twig_Sandbox_SecurityNotAllowedTagError');
246 $this->assertEquals(
'sandbox', $e->getTagName());
253 {%-
import _self as macros %}
255 {%- macro test(text) %}<p>{{ text }}</p>{% endmacro %}
257 {{- macros.test(
'username') }}
259 ),
array(
'macro',
'import'),
array(
'escape'));
261 $this->assertEquals(
'<p>username</p>', $twig->loadTemplate(
'index')->render(
array()));
275 $this->fail(
'An exception should be thrown for this test to be valid.');
278 $this->assertFalse($twig->getExtension(
'Twig_Extension_Sandbox')->isSandboxed(),
'Sandboxed include() function call should not leave Sandbox enabled when an error occurs.');
294 public static $called =
array(
'__toString' => 0,
'foo' => 0,
'getFooBar' => 0);
298 public static function reset()
300 self::$called =
array(
'__toString' => 0,
'foo' => 0,
'getFooBar' => 0);
303 public function __toString()
305 ++self::$called[
'__toString'];
310 public function foo()
312 ++self::$called[
'foo'];
317 public function getFooBar()
319 ++self::$called[
'getFooBar'];
Exception thrown when a security error occurs at runtime.
testSandboxUnallowedFilter()
testSandboxAllowFunctionsCaseInsensitive()
testSandboxAllowMethodFoo()
testSandboxUnallowedFunction()
testSandboxDisabledAfterIncludeFunctionError()
testSandboxAllowMethodToStringDisabled()
testSandboxWithInheritance()
Twig_Sandbox_SecurityError Filter "json_encode" is not allowed in "1_child" at line 3...
testSandboxUnallowedToString()
testSandboxUnallowedToStringArray()
testSandboxAllowRangeOperator()
testSandboxUnallowedTag()
getEnvironment($sandboxed, $options, $templates, $tags=array(), $filters=array(), $methods=array(), $properties=array(), $functions=array())
testSandboxLocallySetForAnInclude()
testSandboxUnallowedRangeOperator()
testSandboxAllowMethodToString()
Create styles array
The data for the language used.
testSandboxUnallowedProperty()
Represents a security policy which need to be enforced when sandbox mode is enabled.
testSandboxAllowFunction()
testSandboxAllowProperty()
Stores the Twig configuration.
testSandboxUnallowedMethodAccessor()
Loads a template from an array.
if(!isset($_REQUEST['ReturnTo'])) if(!isset($_REQUEST['AuthId'])) $options
const EOF
How fgetc() reports an End Of File.