From c4551ca7cac19d1a69ed13d741afa1f4c1d29e89 Mon Sep 17 00:00:00 2001 From: Evan Hahn <69474926+EvanHahn-Signal@users.noreply.github.com> Date: Tue, 23 Feb 2021 10:00:18 -0600 Subject: [PATCH] Revoke object URLs in two error cases --- js/views/identicon_svg_view.js | 9 +++++++-- ts/views/conversation_view.ts | 11 ++++++++++- 2 files changed, 17 insertions(+), 3 deletions(-) diff --git a/js/views/identicon_svg_view.js b/js/views/identicon_svg_view.js index 60b51999ddf..9933ca8acbe 100644 --- a/js/views/identicon_svg_view.js +++ b/js/views/identicon_svg_view.js @@ -1,4 +1,4 @@ -// Copyright 2015-2020 Signal Messenger, LLC +// Copyright 2015-2021 Signal Messenger, LLC // SPDX-License-Identifier: AGPL-3.0-only /* global Whisper, loadImage */ @@ -21,7 +21,7 @@ const svg = new Blob([html], { type: 'image/svg+xml;charset=utf-8' }); return URL.createObjectURL(svg); }, - getDataUrl() { + getDataUrl() /* : Promise<string> */ { const svgurl = this.getSVGUrl(); return new Promise(resolve => { const img = document.createElement('img'); @@ -36,6 +36,11 @@ URL.revokeObjectURL(svgurl); resolve(canvas.toDataURL('image/png')); }; + img.onerror = () => { + URL.revokeObjectURL(svgurl); + // If this fails for some reason, we'd rather continue on than reject. + resolve(undefined); + }; img.src = svgurl; }); diff --git a/ts/views/conversation_view.ts b/ts/views/conversation_view.ts index 046b5eeac9b..b7466568cc5 100644 --- a/ts/views/conversation_view.ts +++ b/ts/views/conversation_view.ts @@ -1805,7 +1805,6 @@ Whisper.ConversationView = Whisper.View.extend({ return new Promise((resolve, reject) => { const url = URL.createObjectURL(file); const img = document.createElement('img'); - img.onerror = reject; img.onload = () => { URL.revokeObjectURL(url); @@ -1863,6 +1862,16 @@ Whisper.ConversationView = Whisper.View.extend({ file: blob, }); }; + img.onerror = ( + _event: unknown, + _source: unknown, + _lineno: unknown, + _colno: unknown, + error: Error = new Error('Failed to load image for auto-scaling') + ) => { + URL.revokeObjectURL(url); + reject(error); + }; img.src = url; }); },