# 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");
+ }
+ }
}
}