Program: 52815
Project: 52815
Buggy source:
private <T extends SecurityPrice>List<T> internalGetQuotes(Class<T> klass,Security security,Date startDate) throws IOException {
  if (security.getTickerSymbol() == null)   throw new IOException(MessageFormat.format(Messages.MsgMissingTickerSymbol,security.getName()));
  Calendar start=Calendar.getInstance();
  start.setTime(startDate);
  Calendar stop=Calendar.getInstance();
  String wknUrl=MessageFormat.format(HISTORICAL_URL,security.getTickerSymbol(),start.get(Calendar.MONTH),start.get(Calendar.DATE),Integer.toString(start.get(Calendar.YEAR)),stop.get(Calendar.MONTH),stop.get(Calendar.DATE),Integer.toString(stop.get(Calendar.YEAR)));
  List<T> answer=new ArrayList<T>();
  InputStream is=null;
  String line=null;
  try {
    is=openStream(wknUrl);
    BufferedReader dis=new BufferedReader(new InputStreamReader(is));
    line=dis.readLine();
    if (!"String_Node_Str".equals(line))     throw new IOException(MessageFormat.format(Messages.MsgUnexpectedHeader,line));
    while ((line=dis.readLine()) != null) {
      String[] values=line.split("String_Node_Str");
      if (values.length != 7)       throw new IOException(MessageFormat.format(Messages.MsgUnexpectedValue,line));
      T price=klass.newInstance();
      SimpleDateFormat dfmt=new SimpleDateFormat("String_Node_Str");
      Date date=dfmt.parse(values[0]);
      Number q=FMT_PRICE.parse(values[6]);
      long v=(long)(q.doubleValue() * 100);
      price.setTime(date);
      price.setValue(v);
      if (price instanceof LatestSecurityPrice) {
        LatestSecurityPrice latest=(LatestSecurityPrice)price;
        q=FMT_PRICE.parse(values[5]);
        latest.setVolume(q.intValue());
        q=FMT_PRICE.parse(values[2]);
        latest.setHigh((long)(q.doubleValue() * 100));
        q=FMT_PRICE.parse(values[3]);
        latest.setLow((long)(q.doubleValue() * 100));
      }
      answer.add(price);
    }
  }
 catch (  NumberFormatException e) {
    throw new IOException(MessageFormat.format(Messages.MsgErrorsConvertingValue,line),e);
  }
catch (  ParseException e) {
    throw new IOException(MessageFormat.format(Messages.MsgErrorsConvertingValue,line),e);
  }
catch (  InstantiationException e) {
    throw new IOException(e);
  }
catch (  IllegalAccessException e) {
    throw new IOException(e);
  }
 finally {
    if (is != null)     is.close();
  }
  return answer;
}

Fixed version (ground truth):
private <T extends SecurityPrice>List<T> internalGetQuotes(Class<T> klass,Security security,Date startDate) throws IOException {
  if (security.getTickerSymbol() == null)   throw new IOException(MessageFormat.format(Messages.MsgMissingTickerSymbol,security.getName()));
  Calendar start=Calendar.getInstance();
  start.setTime(startDate);
  Calendar stop=Calendar.getInstance();
  String wknUrl=MessageFormat.format(HISTORICAL_URL,security.getTickerSymbol(),start.get(Calendar.MONTH),start.get(Calendar.DATE),Integer.toString(start.get(Calendar.YEAR)),stop.get(Calendar.MONTH),stop.get(Calendar.DATE),Integer.toString(stop.get(Calendar.YEAR)));
  List<T> answer=new ArrayList<T>();
  InputStream is=null;
  String line=null;
  try {
    is=openStream(wknUrl);
    BufferedReader dis=new BufferedReader(new InputStreamReader(is));
    line=dis.readLine();
    if (!"String_Node_Str".equals(line))     throw new IOException(MessageFormat.format(Messages.MsgUnexpectedHeader,line));
    DecimalFormat priceFormat=FMT_PRICE.get();
    while ((line=dis.readLine()) != null) {
      String[] values=line.split("String_Node_Str");
      if (values.length != 7)       throw new IOException(MessageFormat.format(Messages.MsgUnexpectedValue,line));
      T price=klass.newInstance();
      SimpleDateFormat dfmt=new SimpleDateFormat("String_Node_Str");
      Date date=dfmt.parse(values[0]);
      Number q=priceFormat.parse(values[6]);
      long v=(long)(q.doubleValue() * 100);
      price.setTime(date);
      price.setValue(v);
      if (price instanceof LatestSecurityPrice) {
        LatestSecurityPrice latest=(LatestSecurityPrice)price;
        q=priceFormat.parse(values[5]);
        latest.setVolume(q.intValue());
        q=priceFormat.parse(values[2]);
        latest.setHigh((long)(q.doubleValue() * 100));
        q=priceFormat.parse(values[3]);
        latest.setLow((long)(q.doubleValue() * 100));
      }
      answer.add(price);
    }
  }
 catch (  NumberFormatException e) {
    throw new IOException(MessageFormat.format(Messages.MsgErrorsConvertingValue,line),e);
  }
catch (  ParseException e) {
    throw new IOException(MessageFormat.format(Messages.MsgErrorsConvertingValue,line),e);
  }
catch (  InstantiationException e) {
    throw new IOException(e);
  }
catch (  IllegalAccessException e) {
    throw new IOException(e);
  }
 finally {
    if (is != null)     is.close();
  }
  return answer;
}