- Fixed bug #46897: ob_flush() should fail to flush unerasable buffers

- Added test for bug46897
- A memleak has been identified while fixing this bug but the changes
  made by this commit do not affect ob_get_clean where the memleak (which
  is fixed in HEAD with the new handler) resides.
- [DOC] New noticed is outputted in ob_flush when the buffer is unerasable
This commit is contained in:
David Coallier 2009-02-13 11:48:17 +00:00
parent e28e05b155
commit 2e5f11b841
2 changed files with 32 additions and 0 deletions

View File

@ -774,6 +774,11 @@ PHP_FUNCTION(ob_flush)
RETURN_FALSE;
}
if (!OG(active_ob_buffer).status && !OG(active_ob_buffer).erase) {
php_error_docref("ref.outcontrol" TSRMLS_CC, E_NOTICE, "failed to flush buffer %s.", OG(active_ob_buffer).handler_name);
RETURN_FALSE;
}
php_end_ob_buffer(1, 1 TSRMLS_CC);
RETURN_TRUE;
}

View File

@ -0,0 +1,27 @@
--TEST--
Bug #46897: ob_flush() should fail to flush unerasable buffers
--FILE--
<?php
function callback($string) {
static $callback_invocations;
$callback_invocations++;
return "[callback:$callback_invocations]$string\n";
}
ob_start('callback', 0, false);
echo "Attempt to flush unerasable buffer - should fail...";
var_dump(ob_flush());
// Check content of buffer after flush - if flush failed it should still contain the string above.
var_dump(ob_get_contents());
echo 'Done';
?>
--EXPECTF--
[callback:1]Attempt to flush unerasable buffer - should fail...
Notice: ob_flush(): failed to flush buffer callback. in %s on line %d
bool(false)
string(%d) "Attempt to flush unerasable buffer - should fail...
Notice: ob_flush(): failed to flush buffer callback. in %s on line %d
bool(false)
"
Done