From: Dan Brown Date: Mon, 9 May 2022 14:25:06 +0000 (+0100) Subject: Updated attachment download to check OB before cleaning it X-Git-Tag: v22.04.2~1^2~2 X-Git-Url: http://source.bookstackapp.com/bookstack/commitdiff_plain/2a99e23e6d2dfa8898eb7e2a9be97cbe9b819b2c Updated attachment download to check OB before cleaning it Call to `ob_end_clean` would error if the environment did not use the PHP `output_buffering` option. This adds an additional check and updates the comment to be more specific to the exact scenario of the condition. Tested with output_buffering=Off and output_buffering=4096 Closes #3415 --- diff --git a/app/Http/Controllers/Controller.php b/app/Http/Controllers/Controller.php index c00ac938b..5b2221fc1 100644 --- a/app/Http/Controllers/Controller.php +++ b/app/Http/Controllers/Controller.php @@ -127,9 +127,11 @@ abstract class Controller extends BaseController protected function streamedDownloadResponse($stream, string $fileName): StreamedResponse { return response()->stream(function () use ($stream) { - // End & flush the output buffer otherwise we still seem to use memory. + + // End & flush the output buffer, if we're in one, otherwise we still use memory. + // Output buffer may or may not exist depending on PHP `output_buffering` setting. // Ignore in testing since output buffers are used to gather a response. - if (!app()->runningUnitTests()) { + if (!empty(ob_get_status()) && !app()->runningUnitTests()) { ob_end_clean(); }