Merge pull request #15062 from owncloud/fix-15053-master

Handle session initialization errors and display error page
This commit is contained in:
Thomas Müller 2015-03-20 14:07:15 +01:00
commit 0b1c4bfc3b
2 changed files with 8 additions and 1 deletions

View File

@ -415,6 +415,7 @@ class OC {
} }
// if session cant be started break with http 500 error // if session cant be started break with http 500 error
} catch (Exception $e) { } catch (Exception $e) {
\OCP\Util::logException('base', $e);
//show the user a detailed error page //show the user a detailed error page
OC_Response::setStatus(OC_Response::STATUS_INTERNAL_SERVER_ERROR); OC_Response::setStatus(OC_Response::STATUS_INTERNAL_SERVER_ERROR);
OC_Template::printExceptionErrorPage($e); OC_Template::printExceptionErrorPage($e);

View File

@ -18,7 +18,9 @@ namespace OC\Session;
class Internal extends Session { class Internal extends Session {
public function __construct($name) { public function __construct($name) {
session_name($name); session_name($name);
set_error_handler(array($this, 'trapError'));
session_start(); session_start();
restore_error_handler();
if (!isset($_SESSION)) { if (!isset($_SESSION)) {
throw new \Exception('Failed to start 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.'); 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) { if ($this->sessionClosed) {
throw new \Exception('Session has been closed - no further changes to the session as allowed'); throw new \Exception('Session has been closed - no further changes to the session as allowed');
} }