diff --git a/base/src/main/java/proguard/ProGuard.java b/base/src/main/java/proguard/ProGuard.java index 8ce5ce68..aa03456d 100644 --- a/base/src/main/java/proguard/ProGuard.java +++ b/base/src/main/java/proguard/ProGuard.java @@ -31,6 +31,7 @@ import proguard.evaluation.IncompleteClassHierarchyException; import proguard.logging.Logging; import proguard.mark.Marker; +import proguard.normalize.StringNormalizer; import proguard.obfuscate.NameObfuscationReferenceFixer; import proguard.obfuscate.ObfuscationPreparation; import proguard.obfuscate.Obfuscator; @@ -219,6 +220,7 @@ public void execute() throws Exception configuration.obfuscate) { expandPrimitiveArrayConstants(); + normalizeStrings(); } if (configuration.targetClassVersion != 0) @@ -269,6 +271,11 @@ public void execute() throws Exception } } + private void normalizeStrings() throws Exception { + passRunner.run(new StringNormalizer(),appView); + + } + /** * Checks the GPL. diff --git a/base/src/main/java/proguard/normalize/StringNormalizer.java b/base/src/main/java/proguard/normalize/StringNormalizer.java new file mode 100644 index 00000000..e65b21e6 --- /dev/null +++ b/base/src/main/java/proguard/normalize/StringNormalizer.java @@ -0,0 +1,22 @@ +package proguard.normalize; + +import proguard.AppView; +import proguard.classfile.visitor.ParallelAllClassVisitor; +import proguard.pass.Pass; +import proguard.pass.PassId; + +/** + * Ensures all strings are at most 65535 bytes in length, when encoded as modified UTF-8. + * + * @see LargeStringSplitter + */ +public class StringNormalizer implements Pass { + + + @Override + public void execute(AppView appView) throws Exception { + appView.programClassPool.accept( + new ParallelAllClassVisitor( + () -> new LargeStringSplitter(appView.programClassPool, appView.libraryClassPool))); + } +} diff --git a/docs/md/manual/releasenotes.md b/docs/md/manual/releasenotes.md index 04296e45..d15f0e3e 100644 --- a/docs/md/manual/releasenotes.md +++ b/docs/md/manual/releasenotes.md @@ -1,3 +1,10 @@ + +## Version 7.6.2 + +### Bugfixes + +- Prevent `IllegalArgumentException` when strings longer than 65535 bytes are present in the application (#267). + ## Version 7.6.1 ### Bugfixes