From 88d6d655a022b8125355409bd88535da756e5c99 Mon Sep 17 00:00:00 2001 From: jeff Date: Wed, 27 Aug 2014 00:57:06 -0400 Subject: add more checking to catch duplicate mappings on load implemented more stable sort order for methods repackaged as v0.4.1beta --- build.gradle | 2 +- readme.txt | 2 +- src/cuchaz/enigma/Constants.java | 2 +- src/cuchaz/enigma/Main.java | 3 +-- src/cuchaz/enigma/mapping/ClassMapping.java | 25 ++++++++++++++++++++++--- src/cuchaz/enigma/mapping/Mappings.java | 9 +++++++++ src/cuchaz/enigma/mapping/MethodMapping.java | 2 +- 7 files changed, 36 insertions(+), 9 deletions(-) diff --git a/build.gradle b/build.gradle index 77d1524a..6508e982 100644 --- a/build.gradle +++ b/build.gradle @@ -19,7 +19,7 @@ targetCompatibility = 1.7 group = "com.cuchazinteractive" archivesBaseName = "enigma" -version = "0.4b" +version = "0.4.1b" sourceSets { diff --git a/readme.txt b/readme.txt index 7e81fcb5..8e0edaaa 100644 --- a/readme.txt +++ b/readme.txt @@ -1,5 +1,5 @@ -Enigma v0.4 beta +Enigma v0.4.1 beta A tool for deobfuscation of Java bytecode Copyright Jeff Martin, 2014 diff --git a/src/cuchaz/enigma/Constants.java b/src/cuchaz/enigma/Constants.java index 6f6ab315..e407dbd8 100644 --- a/src/cuchaz/enigma/Constants.java +++ b/src/cuchaz/enigma/Constants.java @@ -14,7 +14,7 @@ package cuchaz.enigma; public class Constants { public static final String Name = "Enigma"; - public static final String Version = "0.4 beta"; + public static final String Version = "0.4.1 beta"; public static final String Url = "http://www.cuchazinteractive.com/enigma"; public static final int MiB = 1024*1024; // 1 mebibyte public static final int KiB = 1024; // 1 kebibyte diff --git a/src/cuchaz/enigma/Main.java b/src/cuchaz/enigma/Main.java index c69b8907..bbee9024 100644 --- a/src/cuchaz/enigma/Main.java +++ b/src/cuchaz/enigma/Main.java @@ -13,7 +13,6 @@ package cuchaz.enigma; import java.io.File; import cuchaz.enigma.gui.Gui; -import cuchaz.enigma.mapping.ClassEntry; public class Main { @@ -33,7 +32,7 @@ public class Main } // DEBUG - gui.getController().openDeclaration( new ClassEntry( "none/bsp" ) ); + //gui.getController().openDeclaration( new ClassEntry( "none/bsp" ) ); } private static File getFile( String path ) diff --git a/src/cuchaz/enigma/mapping/ClassMapping.java b/src/cuchaz/enigma/mapping/ClassMapping.java index c7f930c6..59365129 100644 --- a/src/cuchaz/enigma/mapping/ClassMapping.java +++ b/src/cuchaz/enigma/mapping/ClassMapping.java @@ -129,10 +129,18 @@ public class ClassMapping implements Serializable, Comparable protected void addFieldMapping( FieldMapping fieldMapping ) { + if( m_fieldsByObf.containsKey( fieldMapping.getObfName() ) ) + { + throw new Error( "Already have mapping for " + m_obfName + "." + fieldMapping.getObfName() ); + } + if( m_fieldsByDeobf.containsKey( fieldMapping.getDeobfName() ) ) + { + throw new Error( "Already have mapping for " + m_deobfName + "." + fieldMapping.getDeobfName() ); + } m_fieldsByObf.put( fieldMapping.getObfName(), fieldMapping ); m_fieldsByDeobf.put( fieldMapping.getDeobfName(), fieldMapping ); + assert( m_fieldsByObf.size() == m_fieldsByDeobf.size() ); } - public String getObfFieldName( String deobfName ) { @@ -179,8 +187,19 @@ public class ClassMapping implements Serializable, Comparable protected void addMethodMapping( MethodMapping methodMapping ) { - m_methodsByObf.put( getMethodKey( methodMapping.getObfName(), methodMapping.getObfSignature() ), methodMapping ); - m_methodsByDeobf.put( getMethodKey( methodMapping.getDeobfName(), methodMapping.getDeobfSignature() ), methodMapping ); + String obfKey = getMethodKey( methodMapping.getObfName(), methodMapping.getObfSignature() ); + String deobfKey = getMethodKey( methodMapping.getDeobfName(), methodMapping.getDeobfSignature() ); + if( m_methodsByObf.containsKey( obfKey ) ) + { + throw new Error( "Already have mapping for " + m_obfName + "." + obfKey ); + } + if( m_methodsByDeobf.containsKey( deobfKey ) ) + { + throw new Error( "Already have mapping for " + m_deobfName + "." + deobfKey ); + } + m_methodsByObf.put( obfKey, methodMapping ); + m_methodsByDeobf.put( deobfKey, methodMapping ); + assert( m_methodsByObf.size() == m_methodsByDeobf.size() ); } public MethodMapping getMethodByObf( String obfName, String signature ) diff --git a/src/cuchaz/enigma/mapping/Mappings.java b/src/cuchaz/enigma/mapping/Mappings.java index c7cb6a67..f3b8fad1 100644 --- a/src/cuchaz/enigma/mapping/Mappings.java +++ b/src/cuchaz/enigma/mapping/Mappings.java @@ -70,8 +70,17 @@ public class Mappings implements Serializable protected void addClassMapping( ClassMapping classMapping ) { + if( m_classesByObf.containsKey( classMapping.getObfName() ) ) + { + throw new Error( "Already have mapping for " + classMapping.getObfName() ); + } + if( m_classesByDeobf.containsKey( classMapping.getDeobfName() ) ) + { + throw new Error( "Already have mapping for " + classMapping.getDeobfName() ); + } m_classesByObf.put( classMapping.getObfName(), classMapping ); m_classesByDeobf.put( classMapping.getDeobfName(), classMapping ); + assert( m_classesByObf.size() == m_classesByDeobf.size() ); } public ClassMapping getClassByObf( ClassEntry entry ) diff --git a/src/cuchaz/enigma/mapping/MethodMapping.java b/src/cuchaz/enigma/mapping/MethodMapping.java index 7857ea7e..6e6bec46 100644 --- a/src/cuchaz/enigma/mapping/MethodMapping.java +++ b/src/cuchaz/enigma/mapping/MethodMapping.java @@ -137,6 +137,6 @@ public class MethodMapping implements Serializable, Comparable @Override public int compareTo( MethodMapping other ) { - return m_obfName.compareTo( other.m_obfName ); + return ( m_obfName + m_obfSignature ).compareTo( ( other.m_obfName + other.m_obfSignature ) ); } } -- cgit v1.2.3