aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorOleg Pudeyev <oleg@bsdpower.com>2011-04-24 22:46:34 -0400
committerOleg Pudeyev <oleg@bsdpower.com>2011-04-24 23:13:13 -0400
commit5afc0b9b905814718ed0292fa5cc7342786c1fca (patch)
tree0efab8e912045ebba7ef199dc45f58ef2892c1e5
parente10d62badc2653d53f326cc1a3b8ab00617bc736 (diff)
downloadforums-5afc0b9b905814718ed0292fa5cc7342786c1fca.tar
forums-5afc0b9b905814718ed0292fa5cc7342786c1fca.tar.gz
forums-5afc0b9b905814718ed0292fa5cc7342786c1fca.tar.bz2
forums-5afc0b9b905814718ed0292fa5cc7342786c1fca.tar.xz
forums-5afc0b9b905814718ed0292fa5cc7342786c1fca.zip
[feature/template-engine] Corrected an off-by-one error in nested namespaces.
This error resulted in a dot from the namespace being placed into variable reference in compiled template code, thus creating bogus compiled template code. PHPBB3-9726
-rw-r--r--phpBB/includes/template_compile.php6
-rw-r--r--tests/template/template_test.php11
-rw-r--r--tests/template/templates/loop_nested_deep_multilevel_ref.html12
-rw-r--r--tests/template/templates/loop_nested_multilevel_ref.html4
4 files changed, 29 insertions, 4 deletions
diff --git a/phpBB/includes/template_compile.php b/phpBB/includes/template_compile.php
index 07e497eca4..cba402f83b 100644
--- a/phpBB/includes/template_compile.php
+++ b/phpBB/includes/template_compile.php
@@ -520,7 +520,11 @@ class phpbb_template_filter extends php_user_filter
if (!empty($varrefs[1]))
{
$namespace = substr($varrefs[1], 0, -1);
- $namespace = (strpos($namespace, '.') === false) ? $namespace : strrchr($namespace, '.');
+ $dot_pos = strrchr($namespace, '.');
+ if ($dot_pos !== false)
+ {
+ $namespace = substr($dot_pos, 1);
+ }
// S_ROW_COUNT is deceptive, it returns the current row number not the number of rows
// hence S_ROW_COUNT is deprecated in favour of S_ROW_NUM
diff --git a/tests/template/template_test.php b/tests/template/template_test.php
index 6ac2f77a2c..5c43fe656e 100644
--- a/tests/template/template_test.php
+++ b/tests/template/template_test.php
@@ -277,7 +277,16 @@ class phpbb_template_template_test extends phpbb_test_case
array(),
array('outer' => array(array('VARIABLE' => 'x'), array('VARIABLE' => 'y')), 'outer.inner' => array(array('VARIABLE' => 'z'), array('VARIABLE' => 'zz'))),
array(),
- "top-level content",
+ // I don't completely understand this output, hopefully it's correct
+ "top-level content\nouter x\nouter y\ninner z\nfirst row\n\ninner zz",
+ ),
+ array(
+ 'loop_nested_deep_multilevel_ref.html',
+ array(),
+ array('outer' => array(array()), 'outer.middle' => array(array()), 'outer.middle.inner' => array(array('VARIABLE' => 'z'), array('VARIABLE' => 'zz'))),
+ array(),
+ // I don't completely understand this output, hopefully it's correct
+ "top-level content\nouter\n\ninner z\nfirst row\n\ninner zz",
),
);
}
diff --git a/tests/template/templates/loop_nested_deep_multilevel_ref.html b/tests/template/templates/loop_nested_deep_multilevel_ref.html
new file mode 100644
index 0000000000..60fad7b4cd
--- /dev/null
+++ b/tests/template/templates/loop_nested_deep_multilevel_ref.html
@@ -0,0 +1,12 @@
+top-level content
+<!-- BEGIN outer -->
+ outer
+ <!-- BEGIN middle -->
+ <!-- BEGIN inner -->
+ inner {inner.VARIABLE}
+ <!-- IF outer.middle.inner.S_FIRST_ROW -->
+ first row
+ <!-- ENDIF -->
+ <!-- END inner -->
+ <!-- END middle -->
+<!-- END outer -->
diff --git a/tests/template/templates/loop_nested_multilevel_ref.html b/tests/template/templates/loop_nested_multilevel_ref.html
index 00a199caee..f2f1c746ed 100644
--- a/tests/template/templates/loop_nested_multilevel_ref.html
+++ b/tests/template/templates/loop_nested_multilevel_ref.html
@@ -1,8 +1,8 @@
top-level content
<!-- BEGIN outer -->
- outer content
+ outer {outer.VARIABLE}
<!-- BEGIN inner -->
- inner content
+ inner {inner.VARIABLE}
<!-- IF outer.inner.S_FIRST_ROW -->
first row
<!-- ENDIF -->