aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorOleg Pudeyev <oleg@bsdpower.com>2011-04-25 13:03:55 -0400
committerOleg Pudeyev <oleg@bsdpower.com>2011-04-25 23:19:25 -0400
commitf97411b91143a0c75ef0ecec3ff03fc36a879728 (patch)
tree65c2bcbe1947dfe78e34e3cc2ae280d837ab06f0
parent8d5e468eb47f35287214ed4a12722d5add5f37ba (diff)
downloadforums-f97411b91143a0c75ef0ecec3ff03fc36a879728.tar
forums-f97411b91143a0c75ef0ecec3ff03fc36a879728.tar.gz
forums-f97411b91143a0c75ef0ecec3ff03fc36a879728.tar.bz2
forums-f97411b91143a0c75ef0ecec3ff03fc36a879728.tar.xz
forums-f97411b91143a0c75ef0ecec3ff03fc36a879728.zip
[feature/template-engine] Corrected miscompilation of loop size constructs.
PHPBB3-9726
-rw-r--r--phpBB/includes/template_compile.php2
-rw-r--r--tests/template/template_test.php7
-rw-r--r--tests/template/templates/loop_size.html39
3 files changed, 47 insertions, 1 deletions
diff --git a/phpBB/includes/template_compile.php b/phpBB/includes/template_compile.php
index cba402f83b..9a8bc05343 100644
--- a/phpBB/includes/template_compile.php
+++ b/phpBB/includes/template_compile.php
@@ -588,7 +588,7 @@ class phpbb_template_filter extends php_user_filter
// Add the block reference for the last child.
$varref .= "['" . $blocks[0] . "']";
}
- $token = "isset($varref) && sizeof($varref)";
+ $token = "(isset($varref) ? sizeof($varref) : 0)";
}
break;
diff --git a/tests/template/template_test.php b/tests/template/template_test.php
index 5c43fe656e..5a21d2f69c 100644
--- a/tests/template/template_test.php
+++ b/tests/template/template_test.php
@@ -288,6 +288,13 @@ class phpbb_template_template_test extends phpbb_test_case
// I don't completely understand this output, hopefully it's correct
"top-level content\nouter\n\ninner z\nfirst row\n\ninner zz",
),
+ array(
+ 'loop_size.html',
+ array(),
+ array('loop' => array(array()), 'empty_loop' => array()),
+ array(),
+ "nonexistent = 0\n! nonexistent\n\nempty = 0\n! empty\nloop\n\nin loop",
+ ),
);
}
diff --git a/tests/template/templates/loop_size.html b/tests/template/templates/loop_size.html
new file mode 100644
index 0000000000..f1938441df
--- /dev/null
+++ b/tests/template/templates/loop_size.html
@@ -0,0 +1,39 @@
+<!-- IF .nonexistent_loop -->
+ nonexistent
+<!-- ENDIF -->
+
+<!-- IF .nonexistent_loop == 0 -->
+ nonexistent = 0
+<!-- ENDIF -->
+
+<!-- IF ! .nonexistent_loop -->
+ ! nonexistent
+<!-- ENDIF -->
+
+<!-- IF .empty_loop -->
+ empty
+<!-- ENDIF -->
+
+<!-- IF .empty_loop == 0 -->
+ empty = 0
+<!-- ENDIF -->
+
+<!-- IF ! .empty_loop -->
+ ! empty
+<!-- ENDIF -->
+
+<!-- IF .loop -->
+ loop
+<!-- ENDIF -->
+
+<!-- IF .loop == 0 -->
+ loop = 0
+<!-- ENDIF -->
+
+<!-- IF ! .loop -->
+ ! loop
+<!-- ENDIF -->
+
+<!-- BEGIN loop -->
+ in loop
+<!-- END -->