Use length in header for checksum, fix error in Dex v41 #2711
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Dex v41 (#2128) allows storing multiple dex files inside a single container. Currently the checksum verification uses the whole file for calculation, which fails if there are multiple files inside a single dex, as the checksum only covers the dex entry that is immediately following the header, not the whole file which is actually 2 or more dex files. This leads to JADX failing to load services.jar in various Android 16 ROMs.
This passes all currently available tests, but I don't know if it will fail on ill-formed dex files out there, one can always disable checksum checking tho.
Example file (taking from Samsung OneUI 8.0):
services.zip