# Fixes installation of those addons which don't have ID on IceCat ("Cannot find id for addon" error). --- a/toolkit/mozapps/extensions/internal/XPIInstall.jsm +++ b/toolkit/mozapps/extensions/internal/XPIInstall.jsm @@ -627,8 +627,30 @@ throw new Error(`Extension is signed with an invalid id (${addon.id})`); } } - if (!addon.id && aLocation.isTemporary) { - addon.id = generateTemporaryInstallID(aPackage.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"); + } + } } }