Program: 78708
Project: 78708
Buggy source:
/** 
 * Returns a List jdbc Drivers. The Drivers are searched from predefined directories in the DTE plug-in. Currently it is expected that the jdbc drivers are in the "drivers" directory of the DTE oda.jdbc plug-in.
 * @param driverName
 * @return
 */
public static List getJdbcDriversFromODADir(String driverName){
  if (jdbcDriverInfos != null)   return jdbcDriverInfos;
  jdbcDriverInfos=new ArrayList();
  driverNameMap=new HashMap();
  file2Drivers=new Hashtable();
  addDriversFromFiles();
  final String ODBCJDBCDriverName="String_Node_Str";
  JDBCDriverInformation ODBCJDBCInfo=null;
  JDBCDriverInformation driverInfos[]=JDBCDriverInfoManager.getDrivers();
  for (int i=0; i < driverInfos.length; i++) {
    JDBCDriverInformation newInfo=driverInfos[i];
    JDBCDriverInformation existing=(JDBCDriverInformation)driverNameMap.get(newInfo.getDriverClassName());
    if (existing == null) {
      if (newInfo.getDriverClassName().equalsIgnoreCase(ODBCJDBCDriverName)) {
        ODBCJDBCInfo=newInfo;
        continue;
      }
      jdbcDriverInfos.add(newInfo);
      driverNameMap.put(newInfo.getDriverClassName(),newInfo);
    }
 else {
      existing.setDisplayName(newInfo.getDisplayName());
      existing.setUrlFormat(newInfo.getUrlFormat());
    }
  }
  if (ODBCJDBCInfo != null) {
    jdbcDriverInfos.add(ODBCJDBCInfo);
    driverNameMap.put(ODBCJDBCInfo.getDriverClassName(),ODBCJDBCInfo);
  }
  Map preferenceMap=Utility.getPreferenceStoredMap(JdbcPlugin.DRIVER_MAP_PREFERENCE_KEY);
  for (Iterator itr=jdbcDriverInfos.iterator(); itr.hasNext(); ) {
    JDBCDriverInformation info=(JDBCDriverInformation)itr.next();
    Object ob=preferenceMap.get(info.toString());
    if (ob != null) {
      DriverInfo driverInfo=(DriverInfo)ob;
      if (driverInfo.getDisplayName() != null && driverInfo.getDisplayName().length() > 0) {
        info.setDisplayName(driverInfo.getDisplayName());
      }
      if (driverInfo.getUrlTemplate() != null && driverInfo.getUrlTemplate().length() > 0) {
        info.setUrlFormat(driverInfo.getUrlTemplate());
      }
    }
  }
  return jdbcDriverInfos;
}

Fixed version (ground truth):
/** 
 * Returns a List jdbc Drivers. The Drivers are searched from predefined directories in the DTE plug-in. Currently it is expected that the jdbc drivers are in the "drivers" directory of the DTE oda.jdbc plug-in.
 * @param driverName
 * @return
 */
public static List getJdbcDriversFromODADir(String driverName){
  if (jdbcDriverInfos != null) {
    if (!driverNameMap.containsValue(jdbcDriverInfos.get(0)))     jdbcDriverInfos.remove(0);
    return jdbcDriverInfos;
  }
  jdbcDriverInfos=new ArrayList();
  driverNameMap=new HashMap();
  file2Drivers=new Hashtable();
  addDriversFromFiles();
  final String ODBCJDBCDriverName="String_Node_Str";
  JDBCDriverInformation ODBCJDBCInfo=null;
  JDBCDriverInformation driverInfos[]=JDBCDriverInfoManager.getDrivers();
  for (int i=0; i < driverInfos.length; i++) {
    JDBCDriverInformation newInfo=driverInfos[i];
    JDBCDriverInformation existing=(JDBCDriverInformation)driverNameMap.get(newInfo.getDriverClassName());
    if (existing == null) {
      if (newInfo.getDriverClassName().equalsIgnoreCase(ODBCJDBCDriverName)) {
        ODBCJDBCInfo=newInfo;
        continue;
      }
      jdbcDriverInfos.add(newInfo);
      driverNameMap.put(newInfo.getDriverClassName(),newInfo);
    }
 else {
      existing.setDisplayName(newInfo.getDisplayName());
      existing.setUrlFormat(newInfo.getUrlFormat());
    }
  }
  if (ODBCJDBCInfo != null) {
    jdbcDriverInfos.add(ODBCJDBCInfo);
    driverNameMap.put(ODBCJDBCInfo.getDriverClassName(),ODBCJDBCInfo);
  }
  Map preferenceMap=Utility.getPreferenceStoredMap(JdbcPlugin.DRIVER_MAP_PREFERENCE_KEY);
  for (Iterator itr=jdbcDriverInfos.iterator(); itr.hasNext(); ) {
    JDBCDriverInformation info=(JDBCDriverInformation)itr.next();
    Object ob=preferenceMap.get(info.toString());
    if (ob != null) {
      DriverInfo driverInfo=(DriverInfo)ob;
      if (driverInfo.getDisplayName() != null && driverInfo.getDisplayName().length() > 0) {
        info.setDisplayName(driverInfo.getDisplayName());
      }
      if (driverInfo.getUrlTemplate() != null && driverInfo.getUrlTemplate().length() > 0) {
        info.setUrlFormat(driverInfo.getUrlTemplate());
      }
    }
  }
  return jdbcDriverInfos;
}