From 29ff86b74fa8c9dad16ac1a283ae15b1c3d5aa1e Mon Sep 17 00:00:00 2001 From: Skylot Date: Sun, 15 Nov 2020 17:54:02 +0000 Subject: [PATCH] fix: don't unload attributes added to class at initial load (#1010) --- .../java/jadx/core/dex/attributes/AType.java | 2 ++ .../java/jadx/core/dex/nodes/ClassNode.java | 22 +++++++++++-------- 2 files changed, 15 insertions(+), 9 deletions(-) diff --git a/jadx-core/src/main/java/jadx/core/dex/attributes/AType.java b/jadx-core/src/main/java/jadx/core/dex/attributes/AType.java index d94edf0c3..6174838be 100644 --- a/jadx-core/src/main/java/jadx/core/dex/attributes/AType.java +++ b/jadx-core/src/main/java/jadx/core/dex/attributes/AType.java @@ -92,6 +92,8 @@ public class AType { public static final AType REG_DEBUG_INFO = new AType<>(); public static final Set> SKIP_ON_UNLOAD = new HashSet<>(Arrays.asList( + SOURCE_FILE, + FIELD_INIT, FIELD_REPLACE, METHOD_INLINE, SKIP_MTH_ARGS)); diff --git a/jadx-core/src/main/java/jadx/core/dex/nodes/ClassNode.java b/jadx-core/src/main/java/jadx/core/dex/nodes/ClassNode.java index 24934a272..a75ce900f 100644 --- a/jadx-core/src/main/java/jadx/core/dex/nodes/ClassNode.java +++ b/jadx-core/src/main/java/jadx/core/dex/nodes/ClassNode.java @@ -167,16 +167,20 @@ public class ClassNode extends NotificationAttrNode implements ILoadable, ICodeN f.addAttr(FieldInitAttr.NULL_VALUE); } } - List values = cls.getStaticFieldInitValues(); - int count = values.size(); - if (count == 0 || count > staticFields.size()) { - return; + try { + List values = cls.getStaticFieldInitValues(); + int count = values.size(); + if (count == 0 || count > staticFields.size()) { + return; + } + for (int i = 0; i < count; i++) { + staticFields.get(i).addAttr(FieldInitAttr.constValue(values.get(i))); + } + // process const fields + root().getConstValues().processConstFields(this, staticFields); + } catch (Exception e) { + this.addWarnComment("Failed to load initial values for static fields", e); } - for (int i = 0; i < count; i++) { - staticFields.get(i).addAttr(FieldInitAttr.constValue(values.get(i))); - } - // process const fields - root().getConstValues().processConstFields(this, staticFields); } private void addSourceFilenameAttr(String fileName) {