Program: 22770
Project: 22770
Buggy source:
private void readSummaryFromParcel(Parcel in){
  final int version=in.readInt();
  if (version != VERSION) {
    Log.w("String_Node_Str","String_Node_Str" + version + "String_Node_Str"+ VERSION+ "String_Node_Str");
    return;
  }
  mStartCount=in.readInt();
  mBatteryUptime=in.readLong();
  mBatteryLastUptime=in.readLong();
  mBatteryRealtime=in.readLong();
  mBatteryLastRealtime=in.readLong();
  mUptime=in.readLong();
  mLastUptime=in.readLong();
  mRealtime=in.readLong();
  mLastRealtime=in.readLong();
  mDischargeStartLevel=in.readInt();
  mDischargeCurrentLevel=in.readInt();
  mStartCount++;
  mScreenOn=false;
  mScreenOnTimer.readSummaryFromParcelLocked(in);
  for (int i=0; i < NUM_SCREEN_BRIGHTNESS_BINS; i++) {
    mScreenBrightnessTimer[i].readSummaryFromParcelLocked(in);
  }
  mInputEventCounter.readSummaryFromParcelLocked(in);
  mPhoneOn=false;
  mPhoneOnTimer.readSummaryFromParcelLocked(in);
  for (int i=0; i < NUM_SIGNAL_STRENGTH_BINS; i++) {
    mPhoneSignalStrengthsTimer[i].readSummaryFromParcelLocked(in);
  }
  mPhoneSignalScanningTimer.readSummaryFromParcelLocked(in);
  for (int i=0; i < NUM_DATA_CONNECTION_TYPES; i++) {
    mPhoneDataConnectionsTimer[i].readSummaryFromParcelLocked(in);
  }
  mWifiOn=false;
  mWifiOnTimer.readSummaryFromParcelLocked(in);
  mWifiRunning=false;
  mWifiRunningTimer.readSummaryFromParcelLocked(in);
  mBluetoothOn=false;
  mBluetoothOnTimer.readSummaryFromParcelLocked(in);
  int NKW=in.readInt();
  for (int ikw=0; ikw < NKW; ikw++) {
    if (in.readInt() != 0) {
      String kwltName=in.readString();
      getKernelWakelockTimerLocked(kwltName).readSummaryFromParcelLocked(in);
    }
  }
  sNumSpeedSteps=in.readInt();
  final int NU=in.readInt();
  for (int iu=0; iu < NU; iu++) {
    int uid=in.readInt();
    Uid u=new Uid(uid);
    mUidStats.put(uid,u);
    u.mWifiTurnedOn=false;
    u.mWifiTurnedOnTimer.readSummaryFromParcelLocked(in);
    u.mFullWifiLockOut=false;
    u.mFullWifiLockTimer.readSummaryFromParcelLocked(in);
    u.mAudioTurnedOn=false;
    u.mAudioTurnedOnTimer.readSummaryFromParcelLocked(in);
    u.mVideoTurnedOn=false;
    u.mVideoTurnedOnTimer.readSummaryFromParcelLocked(in);
    u.mScanWifiLockOut=false;
    u.mScanWifiLockTimer.readSummaryFromParcelLocked(in);
    u.mWifiMulticastEnabled=false;
    u.mWifiMulticastTimer.readSummaryFromParcelLocked(in);
    if (in.readInt() != 0) {
      if (u.mUserActivityCounters == null) {
        u.initUserActivityLocked();
      }
      for (int i=0; i < Uid.NUM_USER_ACTIVITY_TYPES; i++) {
        u.mUserActivityCounters[i].readSummaryFromParcelLocked(in);
      }
    }
    int NW=in.readInt();
    for (int iw=0; iw < NW; iw++) {
      String wlName=in.readString();
      if (in.readInt() != 0) {
        u.getWakeTimerLocked(wlName,WAKE_TYPE_FULL).readSummaryFromParcelLocked(in);
      }
      if (in.readInt() != 0) {
        u.getWakeTimerLocked(wlName,WAKE_TYPE_PARTIAL).readSummaryFromParcelLocked(in);
      }
      if (in.readInt() != 0) {
        u.getWakeTimerLocked(wlName,WAKE_TYPE_WINDOW).readSummaryFromParcelLocked(in);
      }
    }
    int NP=in.readInt();
    for (int is=0; is < NP; is++) {
      int seNumber=in.readInt();
      if (in.readInt() != 0) {
        u.getSensorTimerLocked(seNumber,true).readSummaryFromParcelLocked(in);
      }
    }
    NP=in.readInt();
    for (int ip=0; ip < NP; ip++) {
      String procName=in.readString();
      Uid.Proc p=u.getProcessStatsLocked(procName);
      p.mUserTime=p.mLoadedUserTime=in.readLong();
      p.mLastUserTime=in.readLong();
      p.mSystemTime=p.mLoadedSystemTime=in.readLong();
      p.mLastSystemTime=in.readLong();
      p.mStarts=p.mLoadedStarts=in.readInt();
      p.mLastStarts=in.readInt();
    }
    NP=in.readInt();
    for (int ip=0; ip < NP; ip++) {
      String pkgName=in.readString();
      Uid.Pkg p=u.getPackageStatsLocked(pkgName);
      p.mWakeups=p.mLoadedWakeups=in.readInt();
      p.mLastWakeups=in.readInt();
      final int NS=in.readInt();
      for (int is=0; is < NS; is++) {
        String servName=in.readString();
        Uid.Pkg.Serv s=u.getServiceStatsLocked(pkgName,servName);
        s.mStartTime=s.mLoadedStartTime=in.readLong();
        s.mLastStartTime=in.readLong();
        s.mStarts=s.mLoadedStarts=in.readInt();
        s.mLastStarts=in.readInt();
        s.mLaunches=s.mLoadedLaunches=in.readInt();
        s.mLastLaunches=in.readInt();
      }
    }
    u.mLoadedTcpBytesReceived=in.readLong();
    u.mLoadedTcpBytesSent=in.readLong();
  }
}

Fixed version (ground truth):
private void readSummaryFromParcel(Parcel in){
  final int version=in.readInt();
  if (version != VERSION) {
    Slog.w("String_Node_Str","String_Node_Str" + version + "String_Node_Str"+ VERSION+ "String_Node_Str");
    return;
  }
  mStartCount=in.readInt();
  mBatteryUptime=in.readLong();
  mBatteryLastUptime=in.readLong();
  mBatteryRealtime=in.readLong();
  mBatteryLastRealtime=in.readLong();
  mUptime=in.readLong();
  mLastUptime=in.readLong();
  mRealtime=in.readLong();
  mLastRealtime=in.readLong();
  mDischargeStartLevel=in.readInt();
  mDischargeCurrentLevel=in.readInt();
  mStartCount++;
  mScreenOn=false;
  mScreenOnTimer.readSummaryFromParcelLocked(in);
  for (int i=0; i < NUM_SCREEN_BRIGHTNESS_BINS; i++) {
    mScreenBrightnessTimer[i].readSummaryFromParcelLocked(in);
  }
  mInputEventCounter.readSummaryFromParcelLocked(in);
  mPhoneOn=false;
  mPhoneOnTimer.readSummaryFromParcelLocked(in);
  for (int i=0; i < NUM_SIGNAL_STRENGTH_BINS; i++) {
    mPhoneSignalStrengthsTimer[i].readSummaryFromParcelLocked(in);
  }
  mPhoneSignalScanningTimer.readSummaryFromParcelLocked(in);
  for (int i=0; i < NUM_DATA_CONNECTION_TYPES; i++) {
    mPhoneDataConnectionsTimer[i].readSummaryFromParcelLocked(in);
  }
  mWifiOn=false;
  mWifiOnTimer.readSummaryFromParcelLocked(in);
  mWifiRunning=false;
  mWifiRunningTimer.readSummaryFromParcelLocked(in);
  mBluetoothOn=false;
  mBluetoothOnTimer.readSummaryFromParcelLocked(in);
  int NKW=in.readInt();
  if (NKW > 10000) {
    Slog.w(TAG,"String_Node_Str" + NKW);
    return;
  }
  for (int ikw=0; ikw < NKW; ikw++) {
    if (in.readInt() != 0) {
      String kwltName=in.readString();
      getKernelWakelockTimerLocked(kwltName).readSummaryFromParcelLocked(in);
    }
  }
  sNumSpeedSteps=in.readInt();
  final int NU=in.readInt();
  if (NU > 10000) {
    Slog.w(TAG,"String_Node_Str" + NU);
    return;
  }
  for (int iu=0; iu < NU; iu++) {
    int uid=in.readInt();
    Uid u=new Uid(uid);
    mUidStats.put(uid,u);
    u.mWifiTurnedOn=false;
    u.mWifiTurnedOnTimer.readSummaryFromParcelLocked(in);
    u.mFullWifiLockOut=false;
    u.mFullWifiLockTimer.readSummaryFromParcelLocked(in);
    u.mAudioTurnedOn=false;
    u.mAudioTurnedOnTimer.readSummaryFromParcelLocked(in);
    u.mVideoTurnedOn=false;
    u.mVideoTurnedOnTimer.readSummaryFromParcelLocked(in);
    u.mScanWifiLockOut=false;
    u.mScanWifiLockTimer.readSummaryFromParcelLocked(in);
    u.mWifiMulticastEnabled=false;
    u.mWifiMulticastTimer.readSummaryFromParcelLocked(in);
    if (in.readInt() != 0) {
      if (u.mUserActivityCounters == null) {
        u.initUserActivityLocked();
      }
      for (int i=0; i < Uid.NUM_USER_ACTIVITY_TYPES; i++) {
        u.mUserActivityCounters[i].readSummaryFromParcelLocked(in);
      }
    }
    int NW=in.readInt();
    if (NW > 10000) {
      Slog.w(TAG,"String_Node_Str" + NW);
      return;
    }
    for (int iw=0; iw < NW; iw++) {
      String wlName=in.readString();
      if (in.readInt() != 0) {
        u.getWakeTimerLocked(wlName,WAKE_TYPE_FULL).readSummaryFromParcelLocked(in);
      }
      if (in.readInt() != 0) {
        u.getWakeTimerLocked(wlName,WAKE_TYPE_PARTIAL).readSummaryFromParcelLocked(in);
      }
      if (in.readInt() != 0) {
        u.getWakeTimerLocked(wlName,WAKE_TYPE_WINDOW).readSummaryFromParcelLocked(in);
      }
    }
    int NP=in.readInt();
    if (NP > 10000) {
      Slog.w(TAG,"String_Node_Str" + NP);
      return;
    }
    for (int is=0; is < NP; is++) {
      int seNumber=in.readInt();
      if (in.readInt() != 0) {
        u.getSensorTimerLocked(seNumber,true).readSummaryFromParcelLocked(in);
      }
    }
    NP=in.readInt();
    if (NP > 10000) {
      Slog.w(TAG,"String_Node_Str" + NP);
      return;
    }
    for (int ip=0; ip < NP; ip++) {
      String procName=in.readString();
      Uid.Proc p=u.getProcessStatsLocked(procName);
      p.mUserTime=p.mLoadedUserTime=in.readLong();
      p.mLastUserTime=in.readLong();
      p.mSystemTime=p.mLoadedSystemTime=in.readLong();
      p.mLastSystemTime=in.readLong();
      p.mStarts=p.mLoadedStarts=in.readInt();
      p.mLastStarts=in.readInt();
    }
    NP=in.readInt();
    if (NP > 10000) {
      Slog.w(TAG,"String_Node_Str" + NP);
      return;
    }
    for (int ip=0; ip < NP; ip++) {
      String pkgName=in.readString();
      Uid.Pkg p=u.getPackageStatsLocked(pkgName);
      p.mWakeups=p.mLoadedWakeups=in.readInt();
      p.mLastWakeups=in.readInt();
      final int NS=in.readInt();
      for (int is=0; is < NS; is++) {
        String servName=in.readString();
        Uid.Pkg.Serv s=u.getServiceStatsLocked(pkgName,servName);
        s.mStartTime=s.mLoadedStartTime=in.readLong();
        s.mLastStartTime=in.readLong();
        s.mStarts=s.mLoadedStarts=in.readInt();
        s.mLastStarts=in.readInt();
        s.mLaunches=s.mLoadedLaunches=in.readInt();
        s.mLastLaunches=in.readInt();
      }
    }
    u.mLoadedTcpBytesReceived=in.readLong();
    u.mLoadedTcpBytesSent=in.readLong();
  }
}