Skip to content

Commit 38fdf8b

Browse files
committed
fix: wrong parsing of class definitions in the dex module.
1 parent 833660e commit 38fdf8b

2 files changed

Lines changed: 34 additions & 16 deletions

File tree

lib/src/modules/dex/parser.rs

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -459,9 +459,11 @@ impl Dex {
459459
return Ok((remainder, Vec::new()));
460460
}
461461

462-
// (class_idx, access_flags, superclass_idx, _, source_file_idx)
463-
let mut it =
464-
iterator(remainder, (le_u32, le_u32, le_u32, le_u32, le_u32));
462+
// (class_idx, access_flags, superclass_idx, interfaces_off, source_file_idx, annotations_off, class_data_off, static_values_off)
463+
let mut it = iterator(
464+
remainder,
465+
(le_u32::<&[u8], Error>, le_u32, le_u32, le_u32, le_u32, le_u32, le_u32, le_u32),
466+
);
465467

466468
let class_entries = it
467469
.by_ref()
@@ -474,6 +476,9 @@ impl Dex {
474476
superclass_idx,
475477
_,
476478
source_file_idx,
479+
_,
480+
_,
481+
_,
477482
)| {
478483
let class = type_items.get(class_idx as usize)?.clone();
479484
let superclass = if superclass_idx != Self::NO_INDEX {

lib/src/modules/dex/tests/testdata/b22108c4e0283e073bddac530bc1286515e078441d92a41e826578e0163d6faf.out

Lines changed: 26 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1529,23 +1529,36 @@ class_defs:
15291529
- class: "Lorg/BasicActivity$1;"
15301530
access_flags: 0x10 # ACC_FINAL
15311531
superclass: "Ljava/lang/Object;"
1532-
- class: "Landroid/content/BroadcastReceiver;"
1532+
- class: "Lorg/BasicActivity$2;"
15331533
access_flags: 0x0
1534-
- class: "I"
1535-
access_flags: 0x2f # ACC_PUBLIC | ACC_PRIVATE | ACC_PROTECTED | ACC_STATIC | ACC_SYNCHRONIZED
1536-
superclass: "J"
1537-
source_file: ".Loader"
1538-
- class: "I"
1539-
access_flags: 0x24 # ACC_PROTECTED | ACC_SYNCHRONIZED
1540-
- class: "I"
1541-
access_flags: 0xffffffff # ACC_PUBLIC | ACC_PRIVATE | ACC_PROTECTED | ACC_STATIC | ACC_FINAL | ACC_SYNCHRONIZED | ACC_BRIDGE | ACC_VARARGS | ACC_NATIVE | ACC_INTERFACE | ACC_ABSTRACT | ACC_STRICT | ACC_SYNTHETIC | ACC_ANNOTATION | ACC_ENUM | ACC_CONSTRUCTOR | ACC_DECLARED_SYNCHRONIZED
1542-
superclass: "I"
1543-
source_file: ".Loader"
1544-
- class: "Lorg/DevService$1;"
1534+
superclass: "Landroid/content/BroadcastReceiver;"
1535+
- class: "Lorg/BasicActivity;"
1536+
access_flags: 0x1 # ACC_PUBLIC
1537+
superclass: "Landroid/app/Activity;"
1538+
- class: "Lorg/CeonstReceiver$1;"
15451539
access_flags: 0x0
1540+
superclass: "Ljava/lang/Object;"
1541+
- class: "Lorg/CeonstReceiver;"
1542+
access_flags: 0x1 # ACC_PUBLIC
15461543
superclass: "Landroid/content/BroadcastReceiver;"
1547-
- class: "Landroid/app/Service;"
1544+
- class: "Lorg/DevService$1;"
15481545
access_flags: 0x0
1546+
superclass: "Landroid/content/BroadcastReceiver;"
1547+
- class: "Lorg/DevService;"
1548+
access_flags: 0x1 # ACC_PUBLIC
1549+
superclass: "Landroid/app/Service;"
1550+
- class: "Lorg/KasReceiver;"
1551+
access_flags: 0x1 # ACC_PUBLIC
1552+
superclass: "Lorg/CeonstReceiver;"
1553+
- class: "Lorg/KseActivity;"
1554+
access_flags: 0x1 # ACC_PUBLIC
1555+
superclass: "Landroid/app/Activity;"
1556+
- class: "Lorg/MvReceiver;"
1557+
access_flags: 0x1 # ACC_PUBLIC
1558+
superclass: "Lorg/CeonstReceiver;"
1559+
- class: "Lorg/hskdAppli;"
1560+
access_flags: 0x1 # ACC_PUBLIC
1561+
superclass: "Landroid/app/Application;"
15491562
map_list:
15501563
size: 15
15511564
items:

0 commit comments

Comments
 (0)