From 0f589d9ce43272153c3b7bd300d1a15fabb87cdd Mon Sep 17 00:00:00 2001 From: Chris Smith Date: Mon, 26 Sep 2011 20:52:07 +0100 Subject: [PATCH 1/4] [ticket/10392] Fix access to nested special block variables. PHPBB3-10392 --- phpBB/includes/template/filter.php | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/phpBB/includes/template/filter.php b/phpBB/includes/template/filter.php index f24c3f4d09..1c8b45307c 100644 --- a/phpBB/includes/template/filter.php +++ b/phpBB/includes/template/filter.php @@ -871,6 +871,8 @@ class phpbb_template_filter extends php_user_filter { // Strip the trailing period. $namespace = substr($namespace, 0, -1); + $local_namespace = substr(strrchr($namespace, '.'), 1); + $local_namespace = ($local_namespace) ? $local_namespace : $namespace; $expr = true; @@ -880,19 +882,19 @@ class phpbb_template_filter extends php_user_filter { case 'S_ROW_NUM': case 'S_ROW_COUNT': - $varref = "\$_${namespace}_i"; + $varref = "\$_${local_namespace}_i"; break; case 'S_NUM_ROWS': - $varref = "\$_${namespace}_count"; + $varref = "\$_${local_namespace}_count"; break; case 'S_FIRST_ROW': - $varref = "(\$_${namespace}_i == 0)"; + $varref = "(\$_${local_namespace}_i == 0)"; break; case 'S_LAST_ROW': - $varref = "(\$_${namespace}_i == \$_${namespace}_count - 1)"; + $varref = "(\$_${local_namespace}_i == \$_${local_namespace}_count - 1)"; break; case 'S_BLOCK_NAME': From 02a24e2439a0ae4c23c94a2aacc0fb407d2ccc0f Mon Sep 17 00:00:00 2001 From: Chris Smith Date: Tue, 27 Sep 2011 00:50:53 +0100 Subject: [PATCH 2/4] [ticket/10392] Missed fix for S_BLOCK_NAME. PHPBB3-10392 --- phpBB/includes/template/filter.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/phpBB/includes/template/filter.php b/phpBB/includes/template/filter.php index 1c8b45307c..b6b9a2963e 100644 --- a/phpBB/includes/template/filter.php +++ b/phpBB/includes/template/filter.php @@ -898,7 +898,7 @@ class phpbb_template_filter extends php_user_filter break; case 'S_BLOCK_NAME': - $varref = "'$namespace'"; + $varref = "'$local_namespace'"; break; default: From 118bc6198e87ffd21835d2477039744e23b04cb7 Mon Sep 17 00:00:00 2001 From: Chris Smith Date: Tue, 27 Sep 2011 01:02:58 +0100 Subject: [PATCH 3/4] [ticket/10392] Test for magic loop variables with nested namespaces. PHPBB3-10392 --- tests/template/template_test.php | 2 +- tests/template/templates/loop_nested_deep_multilevel_ref.html | 3 ++- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/tests/template/template_test.php b/tests/template/template_test.php index 28eba05217..cf772a5284 100644 --- a/tests/template/template_test.php +++ b/tests/template/template_test.php @@ -248,7 +248,7 @@ class phpbb_template_template_test extends phpbb_template_template_test_case 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", + "top-level content\nouter\nmiddle\ninner z\nfirst row of 2 in inner\n\ninner zz", ), array( 'loop_size.html', diff --git a/tests/template/templates/loop_nested_deep_multilevel_ref.html b/tests/template/templates/loop_nested_deep_multilevel_ref.html index 60fad7b4cd..bcc2a7c07b 100644 --- a/tests/template/templates/loop_nested_deep_multilevel_ref.html +++ b/tests/template/templates/loop_nested_deep_multilevel_ref.html @@ -2,10 +2,11 @@ top-level content outer + {outer.middle.S_BLOCK_NAME} inner {inner.VARIABLE} - first row + first row of {outer.middle.inner.S_NUM_ROWS} in {middle.inner.S_BLOCK_NAME} From 1f140130930e40dcf3e6693feb1b53d14e46d098 Mon Sep 17 00:00:00 2001 From: Chris Smith Date: Tue, 27 Sep 2011 01:06:43 +0100 Subject: [PATCH 4/4] [ticket/10392] Alter parent namespace stripping. PHPBB3-10392 --- phpBB/includes/template/filter.php | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/phpBB/includes/template/filter.php b/phpBB/includes/template/filter.php index b6b9a2963e..da2cffe64f 100644 --- a/phpBB/includes/template/filter.php +++ b/phpBB/includes/template/filter.php @@ -871,8 +871,15 @@ class phpbb_template_filter extends php_user_filter { // Strip the trailing period. $namespace = substr($namespace, 0, -1); - $local_namespace = substr(strrchr($namespace, '.'), 1); - $local_namespace = ($local_namespace) ? $local_namespace : $namespace; + + if (($pos = strrpos($namespace, '.')) !== false) + { + $local_namespace = substr($namespace, $pos + 1); + } + else + { + $local_namespace = $namespace; + } $expr = true;