Program: 37713
Project: 37713
Buggy source:
/** 
 * This is generally called after getPath() to find the path back.  The path back could be asymmetric, but this will increase the odds that we return the symmetric path if it exists. The hint will be used to determine if it exists.  If it does, then use it as the start bestCost and bestPath.  That should help speed things along. Whereas it's possible that could build up the SearchNodes for this path (if found) and put them into the visited bucket, we'll start without that optimization and decide later whether adding it provides any efficiencies
 * @param hint The path to use as a starting point. It can be in reverse order (we'll reverse it)
 * @return An ordered list that represents the path from start to end.
 */
public LinkedList<SimpleIsl> getPath(List<SimpleIsl> hint){
  if (hint != null && hint.size() > 0) {
    SimpleSwitch from=network.getSimpleSwitch(hint.get(0).src_dpid);
    SimpleSwitch to=network.getSimpleSwitch(hint.get(hint.size() - 1).dst_dpid);
    if (start.equals(to) && end.equals(from)) {
      logger.trace("String_Node_Str",from,to,to,from);
      hint=swapSrcDst(Lists.reverse(hint));
      from=network.getSimpleSwitch(hint.get(0).src_dpid);
      to=network.getSimpleSwitch(hint.get(hint.size() - 1).dst_dpid);
    }
    if (start.equals(from) && end.equals(to)) {
      logger.trace("String_Node_Str",from,to);
      SearchNode best=confirmIsls(hint);
      if (best != null) {
        logger.debug("String_Node_Str",from,to);
        bestCost=best.parentCost;
        bestPath=best;
      }
 else {
        logger.info("String_Node_Str",from,to);
      }
    }
  }
  return getPath();
}

Fixed version (ground truth):
/** 
 * This is generally called after getPath() to find the path back.  The path back could be asymmetric, but this will increase the odds that we return the symmetric path if it exists. The hint will be used to determine if it exists.  If it does, then use it as the start bestCost and bestPath.  That should help speed things along. <p/> Whereas it's possible that could build up the SearchNodes for this path (if found) and put them into the visited bucket, we'll start without that optimization and decide later whether adding it provides any efficiencies
 * @param hint The path to use as a starting point. It can be in reverse order (we'll reverse it)
 * @return An ordered list that represents the path from start to end.
 */
public LinkedList<SimpleIsl> getPath(List<SimpleIsl> hint){
  if (hint != null && hint.size() > 0) {
    SimpleSwitch from=network.getSimpleSwitch(hint.get(0).getSrcDpid());
    SimpleSwitch to=network.getSimpleSwitch(hint.get(hint.size() - 1).getDstDpid());
    if (start.equals(to) && end.equals(from)) {
      logger.trace("String_Node_Str",from,to,to,from);
      hint=swapSrcDst(Lists.reverse(hint));
      from=network.getSimpleSwitch(hint.get(0).getSrcDpid());
      to=network.getSimpleSwitch(hint.get(hint.size() - 1).getDstDpid());
    }
    if (start.equals(from) && end.equals(to)) {
      logger.trace("String_Node_Str",from,to);
      SearchNode best=confirmIsls(hint);
      if (best != null) {
        logger.debug("String_Node_Str",from,to);
        bestCost=best.parentCost;
        bestPath=best;
      }
 else {
        logger.info("String_Node_Str",from,to);
      }
    }
  }
  return getPath();
}