Check crc and time of secondary dex files
Protect extracted dex files from modifications by checking their crc and
modification time. In case of change, proceed to a new extraction.
Those checks are replacing the check of the zip integrity by
opening it with a ZipFile.
Test: SupportMultidexHostTest (from tradefed)
Bug: 32159214
Change-Id: I09aa01550782f5f550bee6fc91709455e82c1057
diff --git a/library/src/android/support/multidex/MultiDex.java b/library/src/android/support/multidex/MultiDex.java
index fad50d7..d35da96 100644
--- a/library/src/android/support/multidex/MultiDex.java
+++ b/library/src/android/support/multidex/MultiDex.java
@@ -155,7 +155,8 @@
}
File dexDir = getDexDir(context, applicationInfo);
- List<File> files = MultiDexExtractor.load(context, applicationInfo, dexDir, false);
+ List<? extends File> files =
+ MultiDexExtractor.load(context, applicationInfo, dexDir, false);
installSecondaryDexes(loader, dexDir, files);
}
@@ -217,7 +218,8 @@
return isMultidexCapable;
}
- private static void installSecondaryDexes(ClassLoader loader, File dexDir, List<File> files)
+ private static void installSecondaryDexes(ClassLoader loader, File dexDir,
+ List<? extends File> files)
throws IllegalArgumentException, IllegalAccessException, NoSuchFieldException,
InvocationTargetException, NoSuchMethodException, IOException {
if (!files.isEmpty()) {
@@ -374,7 +376,8 @@
*/
private static final class V19 {
- private static void install(ClassLoader loader, List<File> additionalClassPathEntries,
+ private static void install(ClassLoader loader,
+ List<? extends File> additionalClassPathEntries,
File optimizedDirectory)
throws IllegalArgumentException, IllegalAccessException,
NoSuchFieldException, InvocationTargetException, NoSuchMethodException {
@@ -439,7 +442,8 @@
*/
private static final class V14 {
- private static void install(ClassLoader loader, List<File> additionalClassPathEntries,
+ private static void install(ClassLoader loader,
+ List<? extends File> additionalClassPathEntries,
File optimizedDirectory)
throws IllegalArgumentException, IllegalAccessException,
NoSuchFieldException, InvocationTargetException, NoSuchMethodException {
@@ -473,7 +477,8 @@
* Installer for platform versions 4 to 13.
*/
private static final class V4 {
- private static void install(ClassLoader loader, List<File> additionalClassPathEntries)
+ private static void install(ClassLoader loader,
+ List<? extends File> additionalClassPathEntries)
throws IllegalArgumentException, IllegalAccessException,
NoSuchFieldException, IOException {
/* The patched class loader is expected to be a descendant of
@@ -490,7 +495,7 @@
File[] extraFiles = new File[extraSize];
ZipFile[] extraZips = new ZipFile[extraSize];
DexFile[] extraDexs = new DexFile[extraSize];
- for (ListIterator<File> iterator = additionalClassPathEntries.listIterator();
+ for (ListIterator<? extends File> iterator = additionalClassPathEntries.listIterator();
iterator.hasNext();) {
File additionalEntry = iterator.next();
String entryPath = additionalEntry.getAbsolutePath();