From 46ef4497acc02cb85988cdc1280d9a6599b36157 Mon Sep 17 00:00:00 2001 From: IssueFloppa <111708497+IssueFloppa@users.noreply.github.com> Date: Sun, 16 Jun 2024 18:09:43 +0100 Subject: [PATCH] Check null for the `packages` field of ClassLoader --- .../java/zone/rong/loliasm/core/LoliTransformer.java | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/src/main/java/zone/rong/loliasm/core/LoliTransformer.java b/src/main/java/zone/rong/loliasm/core/LoliTransformer.java index fec6e8d..f95a4f4 100644 --- a/src/main/java/zone/rong/loliasm/core/LoliTransformer.java +++ b/src/main/java/zone/rong/loliasm/core/LoliTransformer.java @@ -15,6 +15,7 @@ import zone.rong.loliasm.LoliLogger; import zone.rong.loliasm.patches.*; +import java.lang.reflect.Field; import java.util.*; import java.util.function.Function; @@ -527,9 +528,13 @@ private byte[] removePackageField(byte[] bytes) { // Canonicalize default ClassLoader packages strings first so any more of the same package strings uses those instances instead. try { - Map packages = (Map) LoliReflector.getField(ClassLoader.class, "packages").get(Launch.classLoader); - Set packageStrings = packages.keySet(); - packageStrings.forEach(LoliStringPool::canonicalize); + Field packagesField = LoliReflector.getField(ClassLoader.class, "packages"); + // Packages field is reflection blacklisted on newer Java versions + if (packagesField != null) { + Map packages = (Map) LoliReflector.getField(ClassLoader.class, "packages").get(Launch.classLoader); + Set packageStrings = packages.keySet(); + packageStrings.forEach(LoliStringPool::canonicalize); + } } catch (IllegalAccessException e) { e.printStackTrace(); }