Fix issue with out-of-order iteration of virtual methods

This commit is contained in:
Ben Gruver 2013-04-19 14:29:07 -07:00
parent b6435e7a47
commit f939e912b5
3 changed files with 18 additions and 4 deletions

View File

@ -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;
}

View File

@ -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();

View File

@ -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();
}
}
}