mirror of
https://github.com/revanced/smali.git
synced 2025-05-09 19:04:32 +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;
|
return instanceFieldsOffset;
|
||||||
}
|
}
|
||||||
DexReader reader = new DexReader(dexFile, staticFieldsOffset);
|
DexReader reader = new DexReader(dexFile, staticFieldsOffset);
|
||||||
DexBackedField.skipAllFields(reader, staticFieldCount);
|
DexBackedField.skipFields(reader, staticFieldCount);
|
||||||
instanceFieldsOffset = reader.getOffset();
|
instanceFieldsOffset = reader.getOffset();
|
||||||
return instanceFieldsOffset;
|
return instanceFieldsOffset;
|
||||||
}
|
}
|
||||||
@ -427,7 +427,7 @@ public class DexBackedClassDef extends BaseTypeReference implements ClassDef {
|
|||||||
return directMethodsOffset;
|
return directMethodsOffset;
|
||||||
}
|
}
|
||||||
DexReader reader = dexFile.readerAt(getInstanceFieldsOffset());
|
DexReader reader = dexFile.readerAt(getInstanceFieldsOffset());
|
||||||
DexBackedField.skipAllFields(reader, instanceFieldCount);
|
DexBackedField.skipFields(reader, instanceFieldCount);
|
||||||
directMethodsOffset = reader.getOffset();
|
directMethodsOffset = reader.getOffset();
|
||||||
return directMethodsOffset;
|
return directMethodsOffset;
|
||||||
}
|
}
|
||||||
@ -437,7 +437,7 @@ public class DexBackedClassDef extends BaseTypeReference implements ClassDef {
|
|||||||
return virtualMethodsOffset;
|
return virtualMethodsOffset;
|
||||||
}
|
}
|
||||||
DexReader reader = dexFile.readerAt(getDirectMethodsOffset());
|
DexReader reader = dexFile.readerAt(getDirectMethodsOffset());
|
||||||
DexBackedField.skipAllFields(reader, instanceFieldCount);
|
DexBackedMethod.skipMethods(reader, directMethodCount);
|
||||||
virtualMethodsOffset = reader.getOffset();
|
virtualMethodsOffset = reader.getOffset();
|
||||||
return virtualMethodsOffset;
|
return virtualMethodsOffset;
|
||||||
}
|
}
|
||||||
|
@ -114,7 +114,7 @@ public class DexBackedField extends BaseFieldReference implements Field {
|
|||||||
* @param reader The reader to skip
|
* @param reader The reader to skip
|
||||||
* @param count The number of encoded_field structures to skip over
|
* @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++) {
|
for (int i=0; i<count; i++) {
|
||||||
reader.skipUleb128();
|
reader.skipUleb128();
|
||||||
reader.skipUleb128();
|
reader.skipUleb128();
|
||||||
|
@ -206,4 +206,18 @@ public class DexBackedMethod extends BaseMethodReference implements Method {
|
|||||||
}
|
}
|
||||||
return parametersOffset;
|
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