From a9b500c03ba469a557ca235e69b7a72494cf6a9b Mon Sep 17 00:00:00 2001
From: Christoph Wurst <christoph@owncloud.com>
Date: Tue, 3 May 2016 16:35:00 +0200
Subject: [PATCH] catch possible SessionNotAvailableExceptions

---
 lib/private/User/Session.php | 29 +++++++++++++++++++++++------
 1 file changed, 23 insertions(+), 6 deletions(-)

diff --git a/lib/private/User/Session.php b/lib/private/User/Session.php
index 0f191d52d43..297ebb2aaf0 100644
--- a/lib/private/User/Session.php
+++ b/lib/private/User/Session.php
@@ -48,6 +48,7 @@ use OCP\ISession;
 use OCP\IUser;
 use OCP\IUserManager;
 use OCP\IUserSession;
+use OCP\Session\Exceptions\SessionNotAvailableException;
 
 /**
  * Class Session
@@ -208,7 +209,11 @@ class Session implements IUserSession, Emitter {
 	}
 
 	protected function validateSession(IUser $user) {
-		$sessionId = $this->session->getId();
+		try {
+			$sessionId = $this->session->getId();
+		} catch (SessionNotAvailableException $ex) {
+			return;
+		}
 		try {
 			$token = $this->tokenProvider->getToken($sessionId);
 		} catch (InvalidTokenException $ex) {
@@ -394,8 +399,12 @@ class Session implements IUserSession, Emitter {
 		$name = isset($request->server['HTTP_USER_AGENT']) ? $request->server['HTTP_USER_AGENT'] : 'unknown browser';
 		$loggedIn = $this->login($uid, $password);
 		if ($loggedIn) {
-			$sessionId = $this->session->getId();
-			$this->tokenProvider->generateToken($sessionId, $uid, $password, $name);
+			try {
+				$sessionId = $this->session->getId();
+				$this->tokenProvider->generateToken($sessionId, $uid, $password, $name);
+			} catch (SessionNotAvailableException $ex) {
+				
+			}
 		}
 		return $loggedIn;
 	}
@@ -447,8 +456,12 @@ class Session implements IUserSession, Emitter {
 		$authHeader = $request->getHeader('Authorization');
 		if (strpos($authHeader, 'token ') === false) {
 			// No auth header, let's try session id
-			$sessionId = $this->session->getId();
-			return $this->validateToken($request, $sessionId);
+			try {
+				$sessionId = $this->session->getId();
+				return $this->validateToken($request, $sessionId);
+			} catch (SessionNotAvailableException $ex) {
+				return false;
+			}
 		} else {
 			$token = substr($authHeader, 6);
 			return $this->validateToken($request, $token);
@@ -496,7 +509,11 @@ class Session implements IUserSession, Emitter {
 		$this->manager->emit('\OC\User', 'logout');
 		$user = $this->getUser();
 		if (!is_null($user)) {
-			$this->tokenProvider->invalidateToken($this->session->getId());
+			try {
+				$this->tokenProvider->invalidateToken($this->session->getId());
+			} catch (SessionNotAvailableException $ex) {
+				
+			}
 		}
 		$this->setUser(null);
 		$this->setLoginName(null);
-- 
GitLab