From b918ef3bc07e068a6bca683bb2d78deaf51f36ef Mon Sep 17 00:00:00 2001 From: shedaniel Date: Sat, 2 Jan 2021 14:02:44 +0800 Subject: [PATCH] Filter jar signing info in MANIFEST.MF properly --- .../net/fabricmc/loom/util/ModProcessor.java | 23 ++++++++++++++++++- 1 file changed, 22 insertions(+), 1 deletion(-) diff --git a/src/main/java/net/fabricmc/loom/util/ModProcessor.java b/src/main/java/net/fabricmc/loom/util/ModProcessor.java index 21cb07c1..f35f7af7 100644 --- a/src/main/java/net/fabricmc/loom/util/ModProcessor.java +++ b/src/main/java/net/fabricmc/loom/util/ModProcessor.java @@ -213,7 +213,7 @@ public class ModProcessor { if (ZipUtil.containsEntry(info.getRemappedOutput(), "META-INF/MANIFEST.MF")) { ZipUtil.transformEntry(info.getRemappedOutput(), "META-INF/MANIFEST.MF", (in, zipEntry, out) -> { Manifest manifest = new Manifest(in); - manifest.getEntries().clear(); + fixManifest(manifest); out.putNextEntry(new ZipEntry(zipEntry.getName())); manifest.write(out); out.closeEntry(); @@ -233,6 +233,27 @@ public class ModProcessor { } } + private static void fixManifest(Manifest manifest) { + Attributes mainAttrs = manifest.getMainAttributes(); + + mainAttrs.remove(Attributes.Name.SIGNATURE_VERSION); + + for (Iterator it = manifest.getEntries().values().iterator(); it.hasNext(); ) { + Attributes attrs = it.next(); + + for (Iterator it2 = attrs.keySet().iterator(); it2.hasNext(); ) { + Attributes.Name attrName = (Attributes.Name) it2.next(); + String name = attrName.toString(); + + if (name.endsWith("-Digest") || name.contains("-Digest-") || name.equals("Magic")) { + it2.remove(); + } + } + + if (attrs.isEmpty()) it.remove(); + } + } + static JsonObject readInstallerJson(File file, Project project) { try { LoomGradleExtension extension = project.getExtensions().getByType(LoomGradleExtension.class);