Program: 194096
Project: 194096
Buggy source:
ViewNode(ParcelTransferReader reader){
  final Parcel in=reader.readParcel();
  reader.mNumReadViews++;
  final PooledStringReader preader=reader.mStringReader;
  mClassName=preader.readString();
  mFlags=in.readInt();
  final int flags=mFlags;
  if ((flags & FLAGS_HAS_ID) != 0) {
    mId=in.readInt();
    if (mId != 0) {
      mIdEntry=preader.readString();
      if (mIdEntry != null) {
        mIdType=preader.readString();
        mIdPackage=preader.readString();
      }
    }
  }
  if ((flags & FLAGS_HAS_LARGE_COORDS) != 0) {
    mX=in.readInt();
    mY=in.readInt();
    mWidth=in.readInt();
    mHeight=in.readInt();
  }
 else {
    int val=in.readInt();
    mX=val & 0x7fff;
    mY=(val >> 16) & 0x7fff;
    val=in.readInt();
    mWidth=val & 0x7fff;
    mHeight=(val >> 16) & 0x7fff;
  }
  if ((flags & FLAGS_HAS_SCROLL) != 0) {
    mScrollX=in.readInt();
    mScrollY=in.readInt();
  }
  if ((flags & FLAGS_HAS_MATRIX) != 0) {
    mMatrix=new Matrix();
    in.readFloatArray(reader.mTmpMatrix);
    mMatrix.setValues(reader.mTmpMatrix);
  }
  if ((flags & FLAGS_HAS_ELEVATION) != 0) {
    mElevation=in.readFloat();
  }
  if ((flags & FLAGS_HAS_ALPHA) != 0) {
    mAlpha=in.readFloat();
  }
  if ((flags & FLAGS_HAS_CONTENT_DESCRIPTION) != 0) {
    mContentDescription=TextUtils.CHAR_SEQUENCE_CREATOR.createFromParcel(in);
  }
  if ((flags & FLAGS_HAS_TEXT) != 0) {
    mText=new ViewNodeText(in,(flags & FLAGS_HAS_COMPLEX_TEXT) == 0);
  }
  if ((flags & FLAGS_HAS_EXTRAS) != 0) {
    mExtras=in.readBundle();
  }
  if ((flags & FLAGS_HAS_CHILDREN) != 0) {
    final int NCHILDREN=in.readInt();
    mChildren=new ViewNode[NCHILDREN];
    for (int i=0; i < NCHILDREN; i++) {
      mChildren[i]=new ViewNode(reader);
    }
  }
}

Fixed version (ground truth):
ViewNode(ParcelTransferReader reader,int nestingLevel){
  final Parcel in=reader.readParcel(VALIDATE_VIEW_TOKEN,nestingLevel);
  reader.mNumReadViews++;
  final PooledStringReader preader=reader.mStringReader;
  mClassName=preader.readString();
  mFlags=in.readInt();
  final int flags=mFlags;
  if ((flags & FLAGS_HAS_ID) != 0) {
    mId=in.readInt();
    if (mId != 0) {
      mIdEntry=preader.readString();
      if (mIdEntry != null) {
        mIdType=preader.readString();
        mIdPackage=preader.readString();
      }
    }
  }
  if ((flags & FLAGS_HAS_LARGE_COORDS) != 0) {
    mX=in.readInt();
    mY=in.readInt();
    mWidth=in.readInt();
    mHeight=in.readInt();
  }
 else {
    int val=in.readInt();
    mX=val & 0x7fff;
    mY=(val >> 16) & 0x7fff;
    val=in.readInt();
    mWidth=val & 0x7fff;
    mHeight=(val >> 16) & 0x7fff;
  }
  if ((flags & FLAGS_HAS_SCROLL) != 0) {
    mScrollX=in.readInt();
    mScrollY=in.readInt();
  }
  if ((flags & FLAGS_HAS_MATRIX) != 0) {
    mMatrix=new Matrix();
    in.readFloatArray(reader.mTmpMatrix);
    mMatrix.setValues(reader.mTmpMatrix);
  }
  if ((flags & FLAGS_HAS_ELEVATION) != 0) {
    mElevation=in.readFloat();
  }
  if ((flags & FLAGS_HAS_ALPHA) != 0) {
    mAlpha=in.readFloat();
  }
  if ((flags & FLAGS_HAS_CONTENT_DESCRIPTION) != 0) {
    mContentDescription=TextUtils.CHAR_SEQUENCE_CREATOR.createFromParcel(in);
  }
  if ((flags & FLAGS_HAS_TEXT) != 0) {
    mText=new ViewNodeText(in,(flags & FLAGS_HAS_COMPLEX_TEXT) == 0);
  }
  if ((flags & FLAGS_HAS_EXTRAS) != 0) {
    mExtras=in.readBundle();
  }
  if ((flags & FLAGS_HAS_CHILDREN) != 0) {
    final int NCHILDREN=in.readInt();
    if (DEBUG_PARCEL_TREE || DEBUG_PARCEL_CHILDREN)     Log.d(TAG,"String_Node_Str" + NCHILDREN + "String_Node_Str"+ reader.mNumReadViews+ "String_Node_Str"+ nestingLevel);
    mChildren=new ViewNode[NCHILDREN];
    for (int i=0; i < NCHILDREN; i++) {
      mChildren[i]=new ViewNode(reader,nestingLevel + 1);
    }
  }
}