From 843fef0490493d1c21863fcd339695177542da53 Mon Sep 17 00:00:00 2001 From: =?utf8?q?Thomas=20M=C3=BCller?= Date: Fri, 20 Mar 2015 12:21:03 +0100 Subject: [PATCH] Handle session initialization errors and display error page - fixes #15053 --- lib/base.php | 1 + lib/private/session/internal.php | 8 +++++++- 2 files changed, 8 insertions(+), 1 deletion(-) 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'); } -- 2.39.5