Return to saved output buffer level on exceptions

This commit is contained in:
Uwe Tews
2015-03-01 21:39:54 +01:00
parent 464b37c053
commit b1cd4cd7d2
4 changed files with 19 additions and 7 deletions

View File

@@ -335,6 +335,7 @@ class Smarty_Internal_Template extends Smarty_Internal_TemplateBase
*/
public function getRenderedTemplateCode()
{
$level = ob_get_level();
try {
ob_start();
if (empty($this->properties['unifunc']) || !is_callable($this->properties['unifunc'])) {
@@ -359,7 +360,9 @@ class Smarty_Internal_Template extends Smarty_Internal_TemplateBase
return ob_get_clean();
}
catch (Exception $e) {
ob_get_clean();
while (ob_get_level() > $level) {
ob_end_clean();
}
throw $e;
}
}

View File

@@ -56,13 +56,16 @@ abstract class Smarty_Resource_Uncompiled extends Smarty_Resource
*/
public function render($_template)
{
$level = ob_get_level();
ob_start();
try {
ob_start();
$this->renderUncompiled($_template->source, $_template);
return ob_get_clean();
}
catch (Exception $e) {
ob_get_clean();
while (ob_get_level() > $level) {
ob_end_clean();
}
throw $e;
}
}

View File

@@ -149,12 +149,15 @@ class Smarty_Template_Compiled
$compileCheck = $_template->smarty->compile_check;
$_template->smarty->compile_check = false;
if ($_template->source->recompiled) {
$level = ob_get_level();
ob_start();
try {
ob_start();
eval("?>" . $this->code);
}
catch (Exception $e) {
ob_get_clean();
while (ob_get_level() > $level) {
ob_end_clean();
}
throw $e;
}
ob_get_clean();

View File

@@ -219,13 +219,16 @@ class Smarty_Template_Source
*/
public function renderUncompiled(Smarty_Internal_Template $_template)
{
$level = ob_get_level();
ob_start();
try {
ob_start();
$this->handler->renderUncompiled($_template->source, $_template);
return ob_get_clean();
}
catch (Exception $e) {
ob_get_clean();
while (ob_get_level() > $level) {
ob_end_clean();
}
throw $e;
}
}