diff --git a/src/util.js b/src/util.js index c94cfd61..0a584f5a 100644 --- a/src/util.js +++ b/src/util.js @@ -64,7 +64,10 @@ export default { } if (util.isUint8Array(obj)) { - if (zero_copy && collection.indexOf(obj.buffer) === -1) { + if (zero_copy && collection.indexOf(obj.buffer) === -1 && !( + navigator.userAgent.indexOf('Version/11.1') !== -1 || // Safari 11.1 + ((navigator.userAgent.match(/Chrome\/(\d+)/) || [])[1] < 56 && navigator.userAgent.indexOf('Edge') === -1) // Chrome < 56 + )) { collection.push(obj.buffer); } return; diff --git a/test/general/openpgp.js b/test/general/openpgp.js index cfead605..0ed9ee9e 100644 --- a/test/general/openpgp.js +++ b/test/general/openpgp.js @@ -1705,7 +1705,11 @@ describe('[Sauce Labs Group 2] OpenPGP.js public api tests', function() { return openpgp.decrypt(decOpt); }).then(function (decrypted) { if (openpgp.getWorker()) { - expect(encOpt.message.packets[0].data.byteLength).to.equal(0); // transferred buffer should be empty + if (navigator.userAgent.indexOf('Safari') !== -1 && (navigator.userAgent.indexOf('Version/11.1') !== -1 || (navigator.userAgent.match(/Chrome\/(\d+)/) || [])[1] < 56)) { + expect(encOpt.message.packets[0].data.byteLength).to.equal(8); // browser doesn't support transfering buffers + } else { + expect(encOpt.message.packets[0].data.byteLength).to.equal(0); // transferred buffer should be empty + } } expect(decrypted.data).to.deep.equal(new Uint8Array([0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01])); expect(decrypted.signatures.length).to.equal(0); diff --git a/test/general/util.js b/test/general/util.js index e9162659..f7e749dc 100644 --- a/test/general/util.js +++ b/test/general/util.js @@ -137,9 +137,15 @@ describe('Util unit tests', function() { it('should return undefined for an empty oject', function() { expect(openpgp.util.getTransferables({}, true)).to.be.undefined; }); - it('should return two buffers', function() { - expect(openpgp.util.getTransferables(obj, true)).to.deep.equal([buf1.buffer, buf2.buffer]); - }); + if (typeof navigator !== 'undefined') { + it('should return two buffers', function() { + expect(openpgp.util.getTransferables(obj, true)).to.deep.equal( + navigator.userAgent.indexOf('Safari') !== -1 && (navigator.userAgent.indexOf('Version/11.1') !== -1 || (navigator.userAgent.match(/Chrome\/(\d+)/) || [])[1] < 56) ? + undefined : + [buf1.buffer, buf2.buffer] + ); + }); + } }); describe("Misc.", function() {