From: Thomas Müller Date: Fri, 20 Mar 2015 11:21:03 +0000 (+0100) Subject: Handle session initialization errors and display error page - fixes #15053 X-Git-Tag: v8.1.0alpha1~234^2 X-Git-Url: https://source.dussan.org/?a=commitdiff_plain;h=843fef0490493d1c21863fcd339695177542da53;p=nextcloud-server.git Handle session initialization errors and display error page - fixes #15053 --- diff --git a/lib/base.php b/lib/base.php index 00117918c87..da4b3a47c75 100644 --- a/lib/base.php +++ b/lib/base.php @@ -415,6 +415,7 @@ class OC { } // if session cant be started break with http 500 error } catch (Exception $e) { + \OCP\Util::logException('base', $e); //show the user a detailed error page OC_Response::setStatus(OC_Response::STATUS_INTERNAL_SERVER_ERROR); OC_Template::printExceptionErrorPage($e); diff --git a/lib/private/session/internal.php b/lib/private/session/internal.php index 8fda6b3b3ee..acd93630f40 100644 --- a/lib/private/session/internal.php +++ b/lib/private/session/internal.php @@ -18,7 +18,9 @@ namespace OC\Session; class Internal extends Session { public function __construct($name) { session_name($name); + set_error_handler(array($this, 'trapError')); session_start(); + restore_error_handler(); if (!isset($_SESSION)) { throw new \Exception('Failed to start session'); } @@ -82,7 +84,11 @@ class Internal extends Session { throw new \Exception('The session cannot be reopened - reopen() is ony to be used in unit testing.'); } - private function validateSession() { + public function trapError($errorNumber, $errorString) { + throw new \ErrorException($errorString); + } + + private function validateSession() { if ($this->sessionClosed) { throw new \Exception('Session has been closed - no further changes to the session as allowed'); }