aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--phpBB/includes/template/compile.php21
-rw-r--r--tests/template/template_compile_test.php32
-rw-r--r--tests/template/templates/trivial.html1
3 files changed, 53 insertions, 1 deletions
diff --git a/phpBB/includes/template/compile.php b/phpBB/includes/template/compile.php
index 4132fb2e34..18a52e87a6 100644
--- a/phpBB/includes/template/compile.php
+++ b/phpBB/includes/template/compile.php
@@ -54,6 +54,7 @@ class phpbb_template_filter extends php_user_filter
public function filter($in, $out, &$consumed, $closing)
{
$written = false;
+ $first = false;
while ($bucket = stream_bucket_make_writeable($in))
{
@@ -71,7 +72,13 @@ class phpbb_template_filter extends php_user_filter
$written = true;
- $bucket->data = $this->compile($data);
+ $data = $this->compile($data);
+ if (!$first)
+ {
+ $data = $this->prepend_preamble($data);
+ $first = false;
+ }
+ $bucket->data = $data;
$bucket->datalen = strlen($bucket->data);
stream_bucket_append($out, $bucket);
}
@@ -150,6 +157,18 @@ class phpbb_template_filter extends php_user_filter
return $data;
}
+ /**
+ * Prepends a preamble to compiled template.
+ * Currently preamble checks if IN_PHPBB is defined and calls exit() if it is not.
+ * @param string $data Compiled template chunk
+ * @return string Compiled template chunk with preamble prepended
+ */
+ private function prepend_preamble($data)
+ {
+ $data = "<?php if (!defined('IN_PHPBB')) exit;" . ((strncmp($data, '<?php', 5) === 0) ? substr($data, 5) : ' ?>' . $data);
+ return $data;
+ }
+
private function replace($matches)
{
if ($this->in_php && $matches[1] != 'ENDPHP')
diff --git a/tests/template/template_compile_test.php b/tests/template/template_compile_test.php
new file mode 100644
index 0000000000..2f12292870
--- /dev/null
+++ b/tests/template/template_compile_test.php
@@ -0,0 +1,32 @@
+<?php
+/**
+*
+* @package testing
+* @copyright (c) 2008 phpBB Group
+* @license http://opensource.org/licenses/gpl-license.php GNU Public License
+*
+*/
+
+require_once dirname(__FILE__) . '/../../phpBB/includes/functions.php';
+require_once dirname(__FILE__) . '/../../phpBB/includes/template.php';
+
+class phpbb_template_template_compile_test extends phpbb_test_case
+{
+ private $template_compile;
+ private $template_path;
+
+ protected function setUp()
+ {
+ $this->template_compile = new phpbb_template_compile();
+ $this->template_path = dirname(__FILE__) . '/templates';
+ }
+
+ public function test_in_phpbb()
+ {
+ $output = $this->template_compile->compile_file($this->template_path . '/trivial.html');
+ $this->assertTrue(strlen($output) > 0);
+ $statements = explode(';', $output);
+ $first_statement = $statements[0];
+ $this->assertTrue(!!preg_match('#if.*defined.*IN_PHPBB.*exit#', $first_statement));
+ }
+}
diff --git a/tests/template/templates/trivial.html b/tests/template/templates/trivial.html
new file mode 100644
index 0000000000..3a1c1c5324
--- /dev/null
+++ b/tests/template/templates/trivial.html
@@ -0,0 +1 @@
+This is a trivial template.