Program: 96142
Project: 96142
Buggy source:
@Override public String evaluate(String[] arguments) throws InvalidDataException {
  validateParamCount(arguments,2);
  try {
    long dateTime=Long.parseLong(arguments[0]);
    if (dateTime < 0) {
      throw new InvalidDataException("String_Node_Str" + dateTime,MessageIDs.E_TOO_SMALL_VALUE);
    }
    String opString=arguments[1];
    int opStringLength=opString.length();
    if (opStringLength < 2) {
      throw new InvalidDataException("String_Node_Str" + opString,MessageIDs.E_WRONG_PARAMETER_VALUE);
    }
    String op=opString.substring(opStringLength - 1,opStringLength);
    String offsetString=op.substring(0,opStringLength - 1);
    try {
      int offset=Integer.parseInt(offsetString);
      Date date=new Date(dateTime);
      Date result=null;
      if (op.equalsIgnoreCase("String_Node_Str")) {
        result=DateUtils.addDays(date,offset);
      }
 else       if (op.equalsIgnoreCase("String_Node_Str")) {
        result=DateUtils.addMonths(date,offset);
      }
 else       if (op.equalsIgnoreCase("String_Node_Str")) {
        result=DateUtils.addYears(date,offset);
      }
 else {
        throw new InvalidDataException("String_Node_Str" + arguments[1],MessageIDs.E_WRONG_PARAMETER_VALUE);
      }
      return String.valueOf(result.getTime());
    }
 catch (    NumberFormatException e) {
      throw new InvalidDataException("String_Node_Str" + arguments[1],MessageIDs.E_WRONG_PARAMETER_VALUE);
    }
  }
 catch (  NumberFormatException e) {
    throw new InvalidDataException("String_Node_Str" + arguments[0],MessageIDs.E_BAD_INT);
  }
}

Fixed version (ground truth):
public String evaluate(String[] arguments) throws InvalidDataException {
  validateParamCount(arguments,2);
  try {
    long dateTime=Long.parseLong(arguments[0]);
    if (dateTime < 0) {
      throw new InvalidDataException("String_Node_Str" + dateTime,MessageIDs.E_TOO_SMALL_VALUE);
    }
    String opString=arguments[1];
    int opStringLength=opString.length();
    if (opStringLength < 2) {
      throw new InvalidDataException("String_Node_Str" + opString,MessageIDs.E_WRONG_PARAMETER_VALUE);
    }
    String op=opString.substring(opStringLength - 1,opStringLength);
    String offsetString=op.substring(0,opStringLength - 1);
    try {
      int offset=Integer.parseInt(offsetString);
      Date date=new Date(dateTime);
      Date result=null;
      if (op.equalsIgnoreCase("String_Node_Str")) {
        result=DateUtils.addDays(date,offset);
      }
 else       if (op.equalsIgnoreCase("String_Node_Str")) {
        result=DateUtils.addMonths(date,offset);
      }
 else       if (op.equalsIgnoreCase("String_Node_Str")) {
        result=DateUtils.addYears(date,offset);
      }
 else {
        throw new InvalidDataException("String_Node_Str" + arguments[1],MessageIDs.E_WRONG_PARAMETER_VALUE);
      }
      return String.valueOf(result.getTime());
    }
 catch (    NumberFormatException e) {
      throw new InvalidDataException("String_Node_Str" + arguments[1],MessageIDs.E_WRONG_PARAMETER_VALUE);
    }
  }
 catch (  NumberFormatException e) {
    throw new InvalidDataException("String_Node_Str" + arguments[0],MessageIDs.E_BAD_INT);
  }
}