From b29d76b5588023fcab1c27280a17e0d9fa973c71 Mon Sep 17 00:00:00 2001 From: Meik Sievertsen Date: Fri, 17 Aug 2007 20:47:50 +0000 Subject: [PATCH] test adding isset() calls to if expressions. :o git-svn-id: file:///svn/phpbb/trunk@8042 89ea8834-ac86-4346-8a33-228a782c2dd0 --- phpBB/includes/functions_template.php | 65 ++++++++++++++++++++++++--- 1 file changed, 59 insertions(+), 6 deletions(-) diff --git a/phpBB/includes/functions_template.php b/phpBB/includes/functions_template.php index 0d8a39eaee..5becb2458b 100644 --- a/phpBB/includes/functions_template.php +++ b/phpBB/includes/functions_template.php @@ -526,7 +526,60 @@ class template_compile } } - return (($elseif) ? '} else if (' : 'if (') . (implode(' ', $tokens) . ') { '); + // Try to combine some tokens... + $new_tokens = array(); + $j = 0; + + for ($i = 0, $size = sizeof($tokens); $i < $size; $i++) + { + $token = &$tokens[$i]; + + if ($token != '&&' && $token != '||') + { + $new_tokens[$j][] = $token; + continue; + } + + $this->_merge_tokens(' ', $new_tokens[$j]); + $new_tokens[$j++] .= $token; + } + + if (!sizeof($new_tokens)) + { + $new_tokens[$j] = &$tokens; + } + + if (isset($new_tokens[$j]) && is_array($new_tokens[$j])) + { + $this->_merge_tokens('', $new_tokens[$j]); + } + + return (($elseif) ? '} else if (' : 'if (') . (implode(' ', $new_tokens) . ') { '); + } + + /** + * Merge tokens from IF expression, correctly adding isset() calls. + * @access private + */ + function _merge_tokens($suffix, &$tokens) + { + for ($i = 0, $size = sizeof($tokens); $i < $size; $i++) + { + $token = &$tokens[$i]; + + if (strpos($token, '$this') === 0) + { + $token = '(isset(' . $token . ') && ' . $token; + $suffix = ')' . $suffix; + } + else if (strpos($token, 'sizeof(') === 0) + { + $token = '(isset(' . substr($token, 7, -1) . ') && ' . $token; + $suffix = ')' . $suffix; + } + } + + $tokens = implode(' ', $tokens) . $suffix; } /** @@ -627,11 +680,11 @@ class template_compile { $expr_end++; $expr_arg = $tokens[$expr_end++]; - $expr = "!(($is_arg / $expr_arg) % $expr_arg)"; + $expr = "!(isset($is_arg) && ($is_arg / $expr_arg) % $expr_arg)"; } else { - $expr = "!($is_arg & 1)"; + $expr = "!(isset($is_arg) && $is_arg & 1)"; } break; @@ -640,11 +693,11 @@ class template_compile { $expr_end++; $expr_arg = $tokens[$expr_end++]; - $expr = "(($is_arg / $expr_arg) % $expr_arg)"; + $expr = "(isset($is_arg) && ($is_arg / $expr_arg) % $expr_arg)"; } else { - $expr = "($is_arg & 1)"; + $expr = "(isset($is_arg) && $is_arg & 1)"; } break; @@ -653,7 +706,7 @@ class template_compile { $expr_end++; $expr_arg = $tokens[$expr_end++]; - $expr = "!($is_arg % $expr_arg)"; + $expr = "!(isset($is_arg) && $is_arg % $expr_arg)"; } break; }