From d3691cf45a26792d983bc2e24f753f9a1ffc888e Mon Sep 17 00:00:00 2001 From: Raymond Hill Date: Tue, 8 May 2018 15:01:25 -0400 Subject: [PATCH] fix https://github.com/uBlockOrigin/uBlock-issues/issues/32 --- platform/chromium/vapi-background.js | 16 +++++++++++++++- 1 file changed, 15 insertions(+), 1 deletion(-) diff --git a/platform/chromium/vapi-background.js b/platform/chromium/vapi-background.js index 3258abe8a..57567a417 100644 --- a/platform/chromium/vapi-background.js +++ b/platform/chromium/vapi-background.js @@ -640,6 +640,9 @@ vAPI.tabs.injectScript = function(tabId, details, callback) { // Firefox for Android does no support browser.browserAction.setIcon(). // Performance: use ImageData for platforms supporting it. +// https://github.com/uBlockOrigin/uBlock-issues/issues/32 +// Ensure ImageData for toolbar icon is valid before use. + vAPI.setIcon = (function() { let browserAction = chrome.browserAction, titleTemplate = chrome.runtime.getManifest().name + ' ({badge})'; @@ -686,7 +689,18 @@ vAPI.setIcon = (function() { ctx.clearRect(0, 0, w, h); ctx.drawImage(img.r, 0, 0); if ( iconData[img.i] === null ) { iconData[img.i] = {}; } - iconData[img.i][img.p] = ctx.getImageData(0, 0, w, h); + let imgData = ctx.getImageData(0, 0, w, h); + if ( + imgData instanceof Object === false || + imgData.data instanceof Uint8ClampedArray === false || + imgData.data[0] !== 0 || + imgData.data[1] !== 0 || + imgData.data[2] !== 0 || + imgData.data[3] !== 0 + ) { + return; + } + iconData[img.i][img.p] = imgData; } icons[0] = { tabId: 0, imageData: iconData[0] }; icons[1] = { tabId: 0, imageData: iconData[1] };