diff options
author | Oleg Pudeyev <oleg@bsdpower.com> | 2011-04-24 22:46:34 -0400 |
---|---|---|
committer | Oleg Pudeyev <oleg@bsdpower.com> | 2011-04-24 23:13:13 -0400 |
commit | 5afc0b9b905814718ed0292fa5cc7342786c1fca (patch) | |
tree | 0efab8e912045ebba7ef199dc45f58ef2892c1e5 | |
parent | e10d62badc2653d53f326cc1a3b8ab00617bc736 (diff) | |
download | forums-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.php | 6 | ||||
-rw-r--r-- | tests/template/template_test.php | 11 | ||||
-rw-r--r-- | tests/template/templates/loop_nested_deep_multilevel_ref.html | 12 | ||||
-rw-r--r-- | tests/template/templates/loop_nested_multilevel_ref.html | 4 |
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 --> |