Throw an error with information if we are reading dex out of bounds
Bug: 153279393
Change-Id: I01a385bb58d89cc5460ba9f6a08f25fda458a1d5
diff --git a/src/main/java/com/android/tools/r8/dex/DexParser.java b/src/main/java/com/android/tools/r8/dex/DexParser.java
index a6eb1c3..2e37abb 100644
--- a/src/main/java/com/android/tools/r8/dex/DexParser.java
+++ b/src/main/java/com/android/tools/r8/dex/DexParser.java
@@ -833,6 +833,19 @@
int unused = dexReader.getUshort();
int size = dexReader.getUint();
int offset = dexReader.getUint();
+ if (offset + size > dexReader.end()) {
+ throw new CompilationError(
+ "The dex file had an offset + size that pointed past the end of the dex file."
+ + "\nSection type: "
+ + DexSection.typeName(type)
+ + "\nSection offset: "
+ + offset
+ + "\nSection size: "
+ + size
+ + "\nFile size: "
+ + dexReader.end(),
+ origin);
+ }
result[i] = new DexSection(type, unused, size, offset);
}
if (Log.ENABLED) {