diff --git a/jadx-core/src/main/java/jadx/core/dex/visitors/RenameVisitor.java b/jadx-core/src/main/java/jadx/core/dex/visitors/RenameVisitor.java index 4f91ed490..77822451f 100644 --- a/jadx-core/src/main/java/jadx/core/dex/visitors/RenameVisitor.java +++ b/jadx-core/src/main/java/jadx/core/dex/visitors/RenameVisitor.java @@ -92,6 +92,9 @@ public class RenameVisitor extends AbstractVisitor { if (firstChar == '$') { return 'C' + NameMapper.removeInvalidCharsMiddle(clsName); } + if (!NameMapper.isValidIdentifier(clsName)) { + return 'C' + clsName; + } return NameMapper.removeInvalidChars(clsName, "C"); } diff --git a/jadx-core/src/test/java/jadx/tests/integration/names/TestReservedClassNames.java b/jadx-core/src/test/java/jadx/tests/integration/names/TestReservedClassNames.java new file mode 100644 index 000000000..b29baa63f --- /dev/null +++ b/jadx-core/src/test/java/jadx/tests/integration/names/TestReservedClassNames.java @@ -0,0 +1,27 @@ +package jadx.tests.integration.names; + +import org.junit.Test; + +import jadx.core.dex.nodes.ClassNode; +import jadx.tests.api.SmaliTest; + +import static org.hamcrest.Matchers.containsString; +import static org.hamcrest.Matchers.not; +import static org.junit.Assert.assertThat; + +import java.io.File; + +public class TestReservedClassNames extends SmaliTest { + /* + public class do { + } + */ + + @Test + public void test() { + ClassNode cls = getClassNodeFromSmali("names" + File.separatorChar + "TestReservedClassNames", "do"); + String code = cls.getCode().toString(); + + assertThat(code, not(containsString("public class do"))); + } +} diff --git a/jadx-core/src/test/smali/names/TestReservedClassNames.smali b/jadx-core/src/test/smali/names/TestReservedClassNames.smali new file mode 100644 index 000000000..b5dadcccc --- /dev/null +++ b/jadx-core/src/test/smali/names/TestReservedClassNames.smali @@ -0,0 +1,12 @@ +.class public Ldo; +.super Ljava/lang/Object; + +# direct methods +.method public constructor ()V + .locals 0 + + .line 3 + invoke-direct {p0}, Ljava/lang/Object;->()V + + return-void +.end method