@@ -912,8 +912,9 @@ static void* swapClassDefItem(const CheckState* state, void* ptr) {
912
912
SWAP_OFFSET4 (item->classDataOff );
913
913
914
914
if ((item->accessFlags & ~ACC_CLASS_MASK) != 0 ) {
915
- ALOGE (" Bogus class access flags %x" , item->accessFlags );
916
- return NULL ;
915
+ // The VM specification says that unknown flags should be ignored.
916
+ ALOGV (" Bogus class access flags %x" , item->accessFlags );
917
+ item->accessFlags &= ACC_CLASS_MASK;
917
918
}
918
919
919
920
return item + 1 ;
@@ -1457,8 +1458,9 @@ static bool verifyFields(const CheckState* state, u4 size,
1457
1458
}
1458
1459
1459
1460
if ((accessFlags & ~ACC_FIELD_MASK) != 0 ) {
1460
- ALOGE (" Bogus field access flags %x @ %d" , accessFlags, i);
1461
- return false ;
1461
+ // The VM specification says that unknown flags should be ignored.
1462
+ ALOGV (" Bogus field access flags %x @ %d" , accessFlags, i);
1463
+ field->accessFlags &= ACC_FIELD_MASK;
1462
1464
}
1463
1465
}
1464
1466
@@ -1487,12 +1489,17 @@ static bool verifyMethods(const CheckState* state, u4 size,
1487
1489
return false ;
1488
1490
}
1489
1491
1490
- if (((accessFlags & ~ACC_METHOD_MASK) != 0 )
1491
- || (isSynchronized && !allowSynchronized)) {
1492
- ALOGE (" Bogus method access flags %x @ %d" , accessFlags, i);
1492
+ if (isSynchronized && !allowSynchronized) {
1493
+ ALOGE (" Bogus method access flags (synchronization) %x @ %d" , accessFlags, i);
1493
1494
return false ;
1494
1495
}
1495
1496
1497
+ if ((accessFlags & ~ACC_METHOD_MASK) != 0 ) {
1498
+ // The VM specification says that unknown flags should be ignored.
1499
+ ALOGV (" Bogus method access flags %x @ %d" , accessFlags, i);
1500
+ method->accessFlags &= ACC_METHOD_MASK;
1501
+ }
1502
+
1496
1503
if (expectCode) {
1497
1504
if (method->codeOff == 0 ) {
1498
1505
ALOGE (" Unexpected zero code_off for access_flags %x" ,
0 commit comments