From e059a6043e77af0cbafb8b2a697378c7257a25bb Mon Sep 17 00:00:00 2001 From: Francis Lachapelle Date: Mon, 28 Nov 2016 15:33:02 -0500 Subject: [PATCH] (js) Fix possible cross-origin exception When SOGo is launched from an external link, either using a different "target" or using window.open(), the Mail composer could throw a JavaScript exception when trying to save or send a message that would completely stop the operation. Fixes #3900 --- NEWS | 6 ++++ .../js/Mailer/MessageEditorController.js | 34 +++++++++++-------- 2 files changed, 26 insertions(+), 14 deletions(-) diff --git a/NEWS b/NEWS index 7a8d0cba1..44e931f84 100644 --- a/NEWS +++ b/NEWS @@ -1,3 +1,9 @@ +3.2.4 (2016-12-DD) +------------------ + +Bug fixes + - [web] fixed JavaScript exception when SOGo is launched from an external link (#3900) + 3.2.3 (2016-11-25) ------------------ diff --git a/UI/WebServerResources/js/Mailer/MessageEditorController.js b/UI/WebServerResources/js/Mailer/MessageEditorController.js index 04de3b3e4..ceabb09e6 100644 --- a/UI/WebServerResources/js/Mailer/MessageEditorController.js +++ b/UI/WebServerResources/js/Mailer/MessageEditorController.js @@ -93,25 +93,31 @@ */ function $parentControllers() { var originMessage, ctrls = {}; - if ($window.opener) { - if ($window.opener.$mailboxController) { - if ($window.opener.$mailboxController.selectedFolder.type == 'draft') { - ctrls.draftMailboxCtrl = $window.opener.$mailboxController; - if ($window.opener.$messageController && - $window.opener.$messageController.message.uid == stateMessage.uid) { - // The draft is opened in the parent window - ctrls.draftMessageCtrl = $window.opener.$messageController; + + try { + if ($window.opener) { + if ('$mailboxController' in $window.opener && + 'selectedFolder' in $window.opener.$mailboxController) { + if ($window.opener.$mailboxController.selectedFolder.type == 'draft') { + ctrls.draftMailboxCtrl = $window.opener.$mailboxController; + if ('$messageController' in $window.opener && + $window.opener.$messageController.message.uid == stateMessage.uid) { + // The draft is opened in the parent window + ctrls.draftMessageCtrl = $window.opener.$messageController; + } } - } - else if (stateMessage.origin) { - originMessage = stateMessage.origin.message; - if ($window.opener.$mailboxController.selectedFolder.$id() == originMessage.$mailbox.$id()) { - // The message mailbox is opened in the parent window - ctrls.originMailboxCtrl = $window.opener.$mailboxController; + else if (stateMessage.origin) { + originMessage = stateMessage.origin.message; + if ($window.opener.$mailboxController.selectedFolder.$id() == originMessage.$mailbox.$id()) { + // The message mailbox is opened in the parent window + ctrls.originMailboxCtrl = $window.opener.$mailboxController; + } } } } } + catch (e) {} + return ctrls; }