OSDN Git Service

am bc03380a: Merge "Remove an assertion that JDWP packets are small."
[android-x86/dalvik.git] / libdex / DexSwapVerify.cpp
index 1835e9b..6cc139d 100644 (file)
@@ -187,7 +187,7 @@ static inline bool checkPtrRange(const CheckState* state,
  */
 #define CHECK_INDEX(_field, _limit) {                                       \
         if ((_field) >= (_limit)) {                                         \
-            ALOGW("Bad index: %s(%u) > %s(%u)",                              \
+            ALOGW("Bad index: %s(%u) > %s(%u)",                             \
                 #_field, (u4)(_field), #_limit, (u4)(_limit));              \
             return 0;                                                       \
         }                                                                   \
@@ -206,7 +206,7 @@ static inline bool checkPtrRange(const CheckState* state,
  */
 #define CHECK_INDEX_OR_NOINDEX(_field, _limit) {                            \
         if ((_field) != kDexNoIndex && (_field) >= (_limit)) {              \
-            ALOGW("Bad index: %s(%u) > %s(%u)",                              \
+            ALOGW("Bad index: %s(%u) > %s(%u)",                             \
                 #_field, (u4)(_field), #_limit, (u4)(_limit));              \
             return 0;                                                       \
         }                                                                   \
@@ -911,6 +911,11 @@ static void* swapClassDefItem(const CheckState* state, void* ptr) {
     SWAP_OFFSET4(item->annotationsOff);
     SWAP_OFFSET4(item->classDataOff);
 
+    if ((item->accessFlags & ~ACC_CLASS_MASK) != 0) {
+        ALOGE("Bogus class access flags %x", item->accessFlags);
+        return NULL;
+    }
+
     return item + 1;
 }
 
@@ -1842,7 +1847,7 @@ static void* swapCodeItem(const CheckState* state, void* ptr) {
     if (item->triesSize == 0) {
         ptr = insns;
     } else {
-        if ((((u4) insns) & 3) != 0) {
+        if ((((uintptr_t) insns) & 3) != 0) {
             // Four-byte alignment for the tries. Verify the spacer is a 0.
             if (*insns != 0) {
                 ALOGE("Non-zero padding: %#x", (u4) *insns);