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) {