Don't do case insensitive checks for META-INF
Fixes: b/282931297
Change-Id: Ie2f6dc2090ef990bcb0a85c4a5e54398d7ed17f0
diff --git a/src/main/java/com/android/tools/r8/utils/ZipUtils.java b/src/main/java/com/android/tools/r8/utils/ZipUtils.java
index 34239d3..068350c 100644
--- a/src/main/java/com/android/tools/r8/utils/ZipUtils.java
+++ b/src/main/java/com/android/tools/r8/utils/ZipUtils.java
@@ -235,14 +235,15 @@
}
public static boolean isClassFile(String entry) {
- String name = StringUtils.toLowerCase(entry);
- if (name.endsWith(MODULE_INFO_CLASS)) {
+ if (entry.endsWith(MODULE_INFO_CLASS)) {
return false;
}
- if (name.startsWith("meta-inf") || name.startsWith("/meta-inf")) {
+ // Only check for upper case META-INF. See JAR File Specification,
+ // https://docs.oracle.com/en/java/javase/17/docs/specs/jar/jar.html.
+ if (entry.startsWith("META-INF") || entry.startsWith("/META-INF")) {
return false;
}
- return name.endsWith(CLASS_EXTENSION);
+ return entry.endsWith(CLASS_EXTENSION);
}
public static class ZipBuilder {
diff --git a/src/test/java/com/android/tools/r8/ArchiveClassFileProviderTest.java b/src/test/java/com/android/tools/r8/ArchiveClassFileProviderTest.java
index b1280e4..9cdc2d1 100644
--- a/src/test/java/com/android/tools/r8/ArchiveClassFileProviderTest.java
+++ b/src/test/java/com/android/tools/r8/ArchiveClassFileProviderTest.java
@@ -48,9 +48,9 @@
public void testMultiReleaseJars() throws IOException {
Path jar = temporaryFolder.getRoot().toPath().resolve("classes.jar");
try (ZipOutputStream output = new ZipOutputStream(Files.newOutputStream(jar))) {
- output.putNextEntry(new ZipEntry("meta-inf/9/Test.class"));
+ output.putNextEntry(new ZipEntry("META-INF/9/Test.class"));
output.closeEntry();
- output.putNextEntry(new ZipEntry("/meta-inf/9/Test.class"));
+ output.putNextEntry(new ZipEntry("/META-INF/9/Test.class"));
output.closeEntry();
}
ArchiveClassFileProvider provider = new ArchiveClassFileProvider(jar);