Program: 17757
Project: 17757
Buggy source:
/** 
 * Process a link set
 */
private void specifiedLinkToColumn(FabricColorGenerator colGen,SortedMap<Integer,FabricLink> linkOrder,boolean userSpec){
  normalCols_.columnCount=0;
  shadowCols_.columnCount=0;
  int numColors=colGen.getNumColors();
  Iterator<Integer> frkit=linkOrder.keySet().iterator();
  while (frkit.hasNext()) {
    Integer nextCol=frkit.next();
    FabricLink nextLink=linkOrder.get(nextCol);
    Integer useForSDef=Integer.valueOf(shadowCols_.columnCount);
    Integer[] colCounts=addLinkDef(nextLink,numColors,normalCols_.columnCount,shadowCols_.columnCount,colGen);
    shadowCols_.columnCount=colCounts[0].intValue();
    if (colCounts[1] != null) {
      normalCols_.columnCount=colCounts[1].intValue();
    }
    LinkInfo linf=getLinkDefinition(useForSDef,true);
    String topNodeName=rowToTarg_.get(Integer.valueOf(linf.topRow()));
    String botNodeName=rowToTarg_.get(Integer.valueOf(linf.bottomRow()));
    NodeInfo nit=nodeDefs_.get(topNodeName);
    NodeInfo nib=nodeDefs_.get(botNodeName);
    if (!userSpec) {
      if (!linf.isShadow()) {
        List<MinMax> dzst=nit.getDrainZones(true);
        if (dzst.size() == 0) {
          dzst=(new ArrayList<MinMax>());
          dzst.add(new MinMax().init());
          nit.addDrainZone(dzst.get(0),true);
        }
        dzst.get(0).update(linf.getUseColumn(true));
        List<MinMax> dznt=nit.getDrainZones(false);
        if (dznt.size() == 0) {
          dznt.add((new MinMax()).init());
          nit.addDrainZone(dznt.get(0),false);
        }
        dznt.get(0).update(linf.getUseColumn(false));
      }
 else {
        List<MinMax> dzsb=nib.getDrainZones(true);
        if (dzsb.size() == 0) {
          dzsb.add((new MinMax()).init());
          nib.addDrainZone(dzsb.get(0),true);
        }
        dzsb.get(0).update(linf.getUseColumn(true));
      }
    }
  }
  if (userSpec) {
    setDrainZonesWithMultipleLabels(true);
    setDrainZonesWithMultipleLabels(false);
  }
 else {
    setDrainZonesByContig(true);
    setDrainZonesByContig(false);
  }
  return;
}

Fixed version (ground truth):
/** 
 * Process a link set
 */
private void specifiedLinkToColumn(FabricColorGenerator colGen,SortedMap<Integer,FabricLink> linkOrder,boolean userSpec){
  normalCols_.columnCount=0;
  shadowCols_.columnCount=0;
  int numColors=colGen.getNumColors();
  Iterator<Integer> frkit=linkOrder.keySet().iterator();
  while (frkit.hasNext()) {
    Integer nextCol=frkit.next();
    FabricLink nextLink=linkOrder.get(nextCol);
    Integer useForSDef=Integer.valueOf(shadowCols_.columnCount);
    Integer[] colCounts=addLinkDef(nextLink,numColors,normalCols_.columnCount,shadowCols_.columnCount,colGen);
    shadowCols_.columnCount=colCounts[0].intValue();
    if (colCounts[1] != null) {
      normalCols_.columnCount=colCounts[1].intValue();
    }
    LinkInfo linf=getLinkDefinition(useForSDef,true);
    String topNodeName=rowToTarg_.get(Integer.valueOf(linf.topRow()));
    String botNodeName=rowToTarg_.get(Integer.valueOf(linf.bottomRow()));
    NodeInfo nit=nodeDefs_.get(topNodeName);
    NodeInfo nib=nodeDefs_.get(botNodeName);
    if (!userSpec) {
      if (!linf.isShadow()) {
        List<MinMax> dzst=nit.getDrainZones(true);
        if (dzst.size() == 0) {
          dzst=(new ArrayList<MinMax>());
          dzst.add(new MinMax().init());
          nit.addDrainZone(dzst.get(0),true);
        }
        dzst.get(0).update(linf.getUseColumn(true));
        List<MinMax> dznt=nit.getDrainZones(false);
        if (dznt.size() == 0) {
          dznt.add((new MinMax()).init());
          nit.addDrainZone(dznt.get(0),false);
        }
        dznt.get(0).update(linf.getUseColumn(false));
      }
 else {
        List<MinMax> dzsb=nib.getDrainZones(true);
        if (dzsb.size() == 0) {
          dzsb.add((new MinMax()).init());
          nib.addDrainZone(dzsb.get(0),true);
        }
        dzsb.get(0).update(linf.getUseColumn(true));
      }
    }
  }
  if (userSpec || this.linkGrouping_ != null) {
    setDrainZonesWithMultipleLabels(true);
    setDrainZonesWithMultipleLabels(false);
  }
 else {
    setDrainZonesByContig(true);
    setDrainZonesByContig(false);
  }
  return;
}