Program: 70655
Project: 70655
Buggy source:
/** 
 * Searches through all "subdirectories" of a URL, gathering classes of type T that match regex
 */
public static ArrayList<Class<?>> findClasses(URL url,String pkg,Pattern regex,Class<?> T){
  ArrayList<Class<?>> classList=new ArrayList<Class<?>>();
  if (pkg.startsWith("String_Node_Str")) {
    pkg=pkg.substring(1);
  }
  if ("String_Node_Str".equals(url.getProtocol())) {
    File file=new File(url.getPath());
    return findClasses(file,pkg,regex,T);
  }
 else   if ("String_Node_Str".equals(url.getProtocol())) {
    JarFile jar=null;
    JarEntry jarEntry=null;
    try {
      JarURLConnection connection=(JarURLConnection)(url.openConnection());
      jar=connection.getJarFile();
      jarEntry=connection.getJarEntry();
    }
 catch (    IOException ioe) {
      Logger logger=getLogger();
      logger.debug("String_Node_Str" + url.toString());
      logger.trace(ioe);
      return classList;
    }
    if (jarEntry.getName().endsWith("String_Node_Str")) {
      String className=jarEntry.getName();
      className=className.substring(0,className.length() - 6);
      maybeAddClass(className,regex,T,classList);
    }
 else {
      Enumeration<JarEntry> entries=jar.entries();
      while (entries.hasMoreElements()) {
        JarEntry entry=entries.nextElement();
        if (entry.getName().startsWith(jarEntry.getName())) {
          if (entry.getName().endsWith("String_Node_Str")) {
            String className=entry.getName();
            className=className.substring(0,className.length() - 6);
            className=className.replace('/','.');
            maybeAddClass(className,regex,T,classList);
          }
        }
      }
    }
  }
  return classList;
}

Fixed version (ground truth):
/** 
 * Searches through all "subdirectories" of a URL, gathering classes of type T that match regex
 */
public static ArrayList<Class<?>> findClasses(URL url,String pkg,Pattern regex,Class<?> T){
  ArrayList<Class<?>> classList=new ArrayList<Class<?>>();
  if (pkg.startsWith("String_Node_Str")) {
    pkg=pkg.substring(1);
  }
  if ("String_Node_Str".equals(url.getProtocol())) {
    File file=new File(getPathDecoded(url));
    return findClasses(file,pkg,regex,T);
  }
 else   if ("String_Node_Str".equals(url.getProtocol())) {
    JarFile jar=null;
    JarEntry jarEntry=null;
    try {
      JarURLConnection connection=(JarURLConnection)(url.openConnection());
      jar=connection.getJarFile();
      jarEntry=connection.getJarEntry();
    }
 catch (    IOException ioe) {
      Logger logger=getLogger();
      logger.debug("String_Node_Str" + url.toString());
      logger.trace(ioe);
      return classList;
    }
    if (jarEntry.getName().endsWith("String_Node_Str")) {
      String className=jarEntry.getName();
      className=className.substring(0,className.length() - 6);
      maybeAddClass(className,regex,T,classList);
    }
 else {
      Enumeration<JarEntry> entries=jar.entries();
      while (entries.hasMoreElements()) {
        JarEntry entry=entries.nextElement();
        if (entry.getName().startsWith(jarEntry.getName())) {
          if (entry.getName().endsWith("String_Node_Str")) {
            String className=entry.getName();
            className=className.substring(0,className.length() - 6);
            className=className.replace('/','.');
            maybeAddClass(className,regex,T,classList);
          }
        }
      }
    }
  }
  return classList;
}