mirror of
https://github.com/revanced/smali.git
synced 2025-05-09 02:44:29 +02:00
Fix issue with out-of-order iteration of virtual methods
This commit is contained in:
parent
b6435e7a47
commit
f939e912b5
@ -417,7 +417,7 @@ public class DexBackedClassDef extends BaseTypeReference implements ClassDef {
|
||||
return instanceFieldsOffset;
|
||||
}
|
||||
DexReader reader = new DexReader(dexFile, staticFieldsOffset);
|
||||
DexBackedField.skipAllFields(reader, staticFieldCount);
|
||||
DexBackedField.skipFields(reader, staticFieldCount);
|
||||
instanceFieldsOffset = reader.getOffset();
|
||||
return instanceFieldsOffset;
|
||||
}
|
||||
@ -427,7 +427,7 @@ public class DexBackedClassDef extends BaseTypeReference implements ClassDef {
|
||||
return directMethodsOffset;
|
||||
}
|
||||
DexReader reader = dexFile.readerAt(getInstanceFieldsOffset());
|
||||
DexBackedField.skipAllFields(reader, instanceFieldCount);
|
||||
DexBackedField.skipFields(reader, instanceFieldCount);
|
||||
directMethodsOffset = reader.getOffset();
|
||||
return directMethodsOffset;
|
||||
}
|
||||
@ -437,7 +437,7 @@ public class DexBackedClassDef extends BaseTypeReference implements ClassDef {
|
||||
return virtualMethodsOffset;
|
||||
}
|
||||
DexReader reader = dexFile.readerAt(getDirectMethodsOffset());
|
||||
DexBackedField.skipAllFields(reader, instanceFieldCount);
|
||||
DexBackedMethod.skipMethods(reader, directMethodCount);
|
||||
virtualMethodsOffset = reader.getOffset();
|
||||
return virtualMethodsOffset;
|
||||
}
|
||||
|
@ -114,7 +114,7 @@ public class DexBackedField extends BaseFieldReference implements Field {
|
||||
* @param reader The reader to skip
|
||||
* @param count The number of encoded_field structures to skip over
|
||||
*/
|
||||
public static void skipAllFields(@Nonnull DexReader reader, int count) {
|
||||
public static void skipFields(@Nonnull DexReader reader, int count) {
|
||||
for (int i=0; i<count; i++) {
|
||||
reader.skipUleb128();
|
||||
reader.skipUleb128();
|
||||
|
@ -206,4 +206,18 @@ public class DexBackedMethod extends BaseMethodReference implements Method {
|
||||
}
|
||||
return parametersOffset;
|
||||
}
|
||||
|
||||
/**
|
||||
* Skips the reader over the specified number of encoded_method structures
|
||||
*
|
||||
* @param reader The reader to skip
|
||||
* @param count The number of encoded_method structures to skip over
|
||||
*/
|
||||
public static void skipMethods(@Nonnull DexReader reader, int count) {
|
||||
for (int i=0; i<count; i++) {
|
||||
reader.skipUleb128();
|
||||
reader.skipUleb128();
|
||||
reader.skipUleb128();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user