--- a/toolkit/mozapps/extensions/internal/XPIInstall.jsm +++ b/toolkit/mozapps/extensions/internal/XPIInstall.jsm @@ -885,8 +885,30 @@ throw new Error(`Webextension is signed with an invalid id (${addon.id})`); } } - if (!addon.id && aInstallLocation.name == KEY_APP_TEMPORARY) { - addon.id = generateTemporaryInstallID(aZipReader.file); + if (!addon.id) { + if (aInstallLocation.name == KEY_APP_TEMPORARY) { + addon.id = generateTemporaryInstallID(aZipReader.file); + } else { + try { + let sigInput = aZipReader.getInputStream("META-INF/cose.sig"); + let sigBinary = Cc['@mozilla.org/binaryinputstream;1'] + .createInstance(Ci.nsIBinaryInputStream); + sigBinary.setInputStream(sigInput); + var sig = '' + var sigCount; + while ((sigCount = sigBinary.available()) > 0) { + sig += sigBinary.readBytes(sigCount); + } + let sigMatch = sig.match(/\{\w{8}-\w{4}-\w{4}-\w{4}-\w{12}\}/g) + if (sigMatch && sigMatch.length == 1) { + addon.id = sigMatch[0] + } else { + logger.warn("Failed to find addon id"); + } + } catch (e) { + logger.warn("Failed to process META-INF/cose.sig"); + } + } } } addon.updateBlocklistState();