Program: 158668
Project: 158668
Buggy source:
@Override public void onMessage(DownloadJob job){
synchronized (job) {
    if (job.getState() != State.NEW) {
      return;
    }
    job.setState(State.WORKING);
  }
  try {
    Source src=job.getSource();
    Destination dst=job.getDestination();
    BoundedRangeModel progress=job.getProgress();
    if (dst.exists()) {
      progress.setMaximum(1);
      progress.setValue(1);
    }
 else {
      progress.setMaximum(src.length());
      InputStream is=new BufferedInputStream(src.open());
      try {
        OutputStream os=new BufferedOutputStream(dst.open());
        try {
          byte[] buf=new byte[8 * 1024];
          int total=0;
          for (int len; (len=is.read(buf)) != -1; ) {
            if (job.getState() == State.ABORTED) {
              throw new IOException("String_Node_Str");
            }
            progress.setValue(total+=len);
            os.write(buf,0,len);
          }
        }
 catch (        IOException ex) {
          try {
            dst.delete();
          }
 catch (          IOException ex1) {
            logger.warn("String_Node_Str",ex1);
          }
          throw ex;
        }
 finally {
          try {
            os.close();
          }
 catch (          IOException ex) {
            logger.warn("String_Node_Str",ex);
          }
        }
      }
  finally {
        try {
          is.close();
        }
 catch (        IOException ex) {
          logger.warn("String_Node_Str",ex);
        }
      }
    }
    job.setState(State.FINISHED);
  }
 catch (  ConnectException ex) {
    String message;
    if (ex.getMessage() != null) {
      message=ex.getMessage();
    }
 else {
      message="String_Node_Str";
    }
    logger.warn("String_Node_Str" + job.getName() + "String_Node_Str"+ job.getSource().toString()+ "String_Node_Str"+ message);
  }
catch (  IOException ex) {
    job.setError(ex);
  }
}

Fixed version (ground truth):
@Override public void onMessage(DownloadJob job){
synchronized (job) {
    if (job.getState() != State.NEW) {
      return;
    }
    job.setState(State.WORKING);
  }
  try {
    Source src=job.getSource();
    Destination dst=job.getDestination();
    BoundedRangeModel progress=job.getProgress();
    if (dst.isValid()) {
      progress.setMaximum(1);
      progress.setValue(1);
    }
 else {
      if (dst.exists()) {
        try {
          dst.delete();
        }
 catch (        IOException ex1) {
          logger.warn("String_Node_Str",ex1);
        }
      }
      progress.setMaximum(src.length());
      InputStream is=new BufferedInputStream(src.open());
      try {
        OutputStream os=new BufferedOutputStream(dst.open());
        try {
          byte[] buf=new byte[8 * 1024];
          int total=0;
          for (int len; (len=is.read(buf)) != -1; ) {
            if (job.getState() == State.ABORTED) {
              throw new IOException("String_Node_Str");
            }
            progress.setValue(total+=len);
            os.write(buf,0,len);
          }
        }
 catch (        IOException ex) {
          try {
            dst.delete();
          }
 catch (          IOException ex1) {
            logger.warn("String_Node_Str",ex1);
          }
          throw ex;
        }
 finally {
          try {
            os.close();
          }
 catch (          IOException ex) {
            logger.warn("String_Node_Str",ex);
          }
        }
      }
  finally {
        try {
          is.close();
        }
 catch (        IOException ex) {
          logger.warn("String_Node_Str",ex);
        }
      }
    }
    job.setState(State.FINISHED);
  }
 catch (  ConnectException ex) {
    String message;
    if (ex.getMessage() != null) {
      message=ex.getMessage();
    }
 else {
      message="String_Node_Str";
    }
    logger.warn("String_Node_Str" + job.getName() + "String_Node_Str"+ job.getSource().toString()+ "String_Node_Str"+ message);
  }
catch (  IOException ex) {
    job.setError(ex);
  }
}