Merge "Force re-extraction if dex number is invalid"
diff --git a/library/src/androidx/multidex/MultiDexExtractor.java b/library/src/androidx/multidex/MultiDexExtractor.java
index 2b96113..a63d724 100644
--- a/library/src/androidx/multidex/MultiDexExtractor.java
+++ b/library/src/androidx/multidex/MultiDexExtractor.java
@@ -20,6 +20,7 @@
 import android.content.SharedPreferences;
 import android.os.Build;
 import android.util.Log;
+
 import java.io.BufferedOutputStream;
 import java.io.Closeable;
 import java.io.File;
@@ -177,7 +178,11 @@
 
         final String extractedFilePrefix = sourceApk.getName() + EXTRACTED_NAME_EXT;
         SharedPreferences multiDexPreferences = getMultiDexPreferences(context);
-        int totalDexNumber = multiDexPreferences.getInt(prefsKeyPrefix + KEY_DEX_NUMBER, 1);
+        int totalDexNumber = multiDexPreferences.getInt(prefsKeyPrefix + KEY_DEX_NUMBER, 0);
+        if (totalDexNumber < 1) {
+            // Guard against SharedPreferences corruption
+            throw new IOException("Invalid dex number: " + totalDexNumber);
+        }
         final List<ExtractedDex> files = new ArrayList<ExtractedDex>(totalDexNumber - 1);
 
         for (int secondaryNumber = 2; secondaryNumber <= totalDexNumber; secondaryNumber++) {