Program: 2150
Project: 2150
Buggy source:
public static byte[] compressTimes(final int[] times){
  final ByteArrayOutputStream outputStream=new ByteArrayOutputStream(times.length / 3);
  final DataOutputStream dataStream=new DataOutputStream(outputStream);
  try {
    int lastTime=times[0];
    int lastDelta=0;
    int repeatCount=0;
    writeTime(0,lastTime,dataStream);
    for (int i=1; i < times.length; i++) {
      final int newTime=times[i];
      if (newTime <= lastTime) {
        log.warn("String_Node_Str",newTime,lastTime);
        continue;
      }
      final int delta=newTime - lastTime;
      final boolean deltaWorks=delta <= MAX_DELTA_TIME;
      final boolean sameDelta=repeatCount > 0 && delta == lastDelta;
      if (deltaWorks) {
        if (sameDelta) {
          repeatCount++;
          if (repeatCount == MAX_REPEAT_COUNT) {
            writeRepeatedDelta(delta,repeatCount,dataStream);
            repeatCount=0;
          }
        }
 else {
          if (repeatCount > 0) {
            writeRepeatedDelta(lastDelta,repeatCount,dataStream);
          }
          repeatCount=1;
        }
        lastDelta=delta;
      }
 else {
        if (repeatCount > 0) {
          writeRepeatedDelta(lastDelta,repeatCount,dataStream);
        }
        writeTime(0,newTime,dataStream);
        repeatCount=0;
        lastDelta=0;
      }
      lastTime=newTime;
    }
    if (repeatCount > 0) {
      writeRepeatedDelta(lastDelta,repeatCount,dataStream);
    }
    outputStream.flush();
    return outputStream.toByteArray();
  }
 catch (  IOException e) {
    log.error(e,"String_Node_Str",times.length);
    return null;
  }
}

Fixed version (ground truth):
public static byte[] compressTimes(final int[] times){
  final ByteArrayOutputStream outputStream=new ByteArrayOutputStream(times.length / 3);
  final DataOutputStream dataStream=new DataOutputStream(outputStream);
  try {
    int lastTime=times[0];
    int lastDelta=0;
    int repeatCount=0;
    writeTime(0,lastTime,dataStream);
    for (int i=1; i < times.length; i++) {
      final int newTime=times[i];
      if (newTime < lastTime) {
        log.warn("String_Node_Str",newTime,lastTime);
        continue;
      }
      final int delta=newTime - lastTime;
      final boolean deltaWorks=delta <= MAX_DELTA_TIME;
      final boolean sameDelta=repeatCount > 0 && delta == lastDelta;
      if (deltaWorks) {
        if (sameDelta) {
          repeatCount++;
          if (repeatCount == MAX_REPEAT_COUNT) {
            writeRepeatedDelta(delta,repeatCount,dataStream);
            repeatCount=0;
          }
        }
 else {
          if (repeatCount > 0) {
            writeRepeatedDelta(lastDelta,repeatCount,dataStream);
          }
          repeatCount=1;
        }
        lastDelta=delta;
      }
 else {
        if (repeatCount > 0) {
          writeRepeatedDelta(lastDelta,repeatCount,dataStream);
        }
        writeTime(0,newTime,dataStream);
        repeatCount=0;
        lastDelta=0;
      }
      lastTime=newTime;
    }
    if (repeatCount > 0) {
      writeRepeatedDelta(lastDelta,repeatCount,dataStream);
    }
    outputStream.flush();
    return outputStream.toByteArray();
  }
 catch (  IOException e) {
    log.error("String_Node_Str",times.length,e);
    return null;
  }
}