diff options
author | Simon Rettberg | 2023-11-14 11:59:50 +0100 |
---|---|---|
committer | Simon Rettberg | 2023-11-14 11:59:50 +0100 |
commit | f0f2e2df375d2d03b32e5f95d776fba87aadeaef (patch) | |
tree | bf391276742c91d3ebaa09204a9bdc6f8980e2dc /modules-available/locationinfo | |
parent | [inv/Eventlog] Fix storing last warning/failure ID for notifications (diff) | |
download | slx-admin-f0f2e2df375d2d03b32e5f95d776fba87aadeaef.tar.gz slx-admin-f0f2e2df375d2d03b32e5f95d776fba87aadeaef.tar.xz slx-admin-f0f2e2df375d2d03b32e5f95d776fba87aadeaef.zip |
[locationinfo] Fix crash with null-deref in exchange backend
Diffstat (limited to 'modules-available/locationinfo')
-rwxr-xr-x | modules-available/locationinfo/inc/coursebackend/coursebackend_exchange.inc.php | 28 |
1 files changed, 15 insertions, 13 deletions
diff --git a/modules-available/locationinfo/inc/coursebackend/coursebackend_exchange.inc.php b/modules-available/locationinfo/inc/coursebackend/coursebackend_exchange.inc.php index a0eca0ec..5920231f 100755 --- a/modules-available/locationinfo/inc/coursebackend/coursebackend_exchange.inc.php +++ b/modules-available/locationinfo/inc/coursebackend/coursebackend_exchange.inc.php @@ -12,6 +12,7 @@ spl_autoload_register(function ($class) { require_once $file; }); +use jamesiarmes\PhpEws\ArrayType\NonEmptyArrayOfBaseFolderIdsType; use jamesiarmes\PhpEws\Client; use jamesiarmes\PhpEws\Enumeration\DefaultShapeNamesType; use jamesiarmes\PhpEws\Enumeration\DistinguishedFolderIdNameType; @@ -186,13 +187,9 @@ class CourseBackend_Exchange extends CourseBackend } /** - * @param \jamesiarmes\PhpEws\Client $client - * @param \DateTime $startDate - * @param \DateTime $endDate - * @param string $roomAddress * @return \jamesiarmes\PhpEws\Type\CalendarItemType[] */ - public function findEventsForRoom($client, $startDate, $endDate, $roomAddress) + public function findEventsForRoom(Client $client, DateTime $startDate, DateTime $endDate, string $roomAddress): array { $request = new FindItemType(); $request->Traversal = ItemQueryTraversalType::SHALLOW; @@ -206,12 +203,20 @@ class CourseBackend_Exchange extends CourseBackend $folderId->Id = DistinguishedFolderIdNameType::CALENDAR; $folderId->Mailbox = new EmailAddressType(); $folderId->Mailbox->EmailAddress = $roomAddress; + $request->ParentFolderIds = new NonEmptyArrayOfBaseFolderIdsType(); $request->ParentFolderIds->DistinguishedFolderId[] = $folderId; - $response = $client->FindItem($request); - $response_messages = $response->ResponseMessages->FindItemResponseMessage; - + try { + $response = $client->FindItem($request); + } catch (Exception $e) { + $this->addError('Exception calling FindItem: ' . $e->getMessage(), true); + return []; + } + if (!is_object($response->ResponseMessages)) { + $this->addError('FindItem returned response without ResponseMessages', true); + return []; + } $items = []; - foreach ($response_messages as $response_message) { + foreach ($response->ResponseMessages->FindItemResponseMessage as $response_message) { // Make sure the request succeeded. if ($response_message->ResponseClass !== ResponseClassType::SUCCESS) { $code = $response_message->ResponseCode; @@ -224,10 +229,7 @@ class CourseBackend_Exchange extends CourseBackend return $items; } - /** - * @return \jamesiarmes\PhpEws\Client - */ - public function getClient() + public function getClient(): Client { $client = new Client($this->serverAddress, $this->username, $this->password, $this->clientVersion); $client->setTimezone($this->timezone); |