1
0
mirror of https://github.com/moparisthebest/mail synced 2024-11-26 19:02:20 -05:00

Merge pull request #133 from whiteout-io/dev/WO-625

[WO-625] Catch exception on socket.oncert
This commit is contained in:
Tankred Hase 2014-09-30 15:55:46 +02:00
commit 658daf21b1
2 changed files with 36 additions and 6 deletions

View File

@ -162,12 +162,18 @@ define(function(require) {
socket.ondata = function() {}; // we don't actually care about the data socket.ondata = function() {}; // we don't actually care about the data
// [WO-625] Mozilla forbids extensions to the TCPSocket object,
// throws an exception when assigned unexpected callback functions.
// The exception can be safely ignored since we need the callback
// for the other shims
try {
socket.oncert = function() { socket.oncert = function() {
if (options.ca) { if (options.ca) {
// the certificate we already have is outdated // the certificate we already have is outdated
error = createError(TLS_WRONG_CERT, strings.connDocTlsWrongCert.replace('{0}', host)); error = createError(TLS_WRONG_CERT, strings.connDocTlsWrongCert.replace('{0}', host));
} }
}; };
} catch (e) {}
socket.onerror = function(e) { socket.onerror = function(e) {
if (!error) { if (!error) {

View File

@ -23,6 +23,7 @@ define(function(require) {
this.onclose(); this.onclose();
} }
}; };
imapStub = sinon.createStubInstance(ImapClient); imapStub = sinon.createStubInstance(ImapClient);
smtpStub = sinon.createStubInstance(SmtpClient); smtpStub = sinon.createStubInstance(SmtpClient);
@ -95,6 +96,29 @@ define(function(require) {
socketStub.onopen(); socketStub.onopen();
}); });
it('should catch Mozilla TCPSocket exception', function(done) {
// Mozilla forbids extensions to the TCPSocket object
Object.defineProperty(socketStub, 'oncert', {
set: function() {
throw 'Mozilla specific behavior';
}
});
doctor._checkReachable(credentials.imap, function(error) {
expect(error).to.not.exist;
expect(TCPSocket.open.calledOnce).to.be.true;
expect(TCPSocket.open.calledWith(credentials.imap.host, credentials.imap.port, {
binaryType: 'arraybuffer',
useSecureTransport: credentials.imap.secure,
ca: credentials.imap.ca
})).to.be.true;
done();
});
socketStub.onopen();
});
it('should fail w/ wrong cert', function(done) { it('should fail w/ wrong cert', function(done) {
doctor._checkReachable(credentials.imap, function(error) { doctor._checkReachable(credentials.imap, function(error) {
expect(error).to.exist; expect(error).to.exist;