Program: 82722
Project: 82722
Buggy source:
/** 
 * Tries to blacklist exactly one version for all callers paths.
 * @param versionMatcher the version matcher to use to interpret versions
 * @param conflictParent the node in which the conflict is occurring
 * @param selectedNode the node in favor of which the conflict is resolved
 * @param evictedNode the node which will be evicted if we are able to blacklist all paths
 * @param node the node for which callers should be considered
 * @return the collection of blacklisting to do, null if a blacklist is not possible in at leastone caller path
 */
private Collection blackListIncompatibleCaller(VersionMatcher versionMatcher,IvyNode conflictParent,IvyNode selectedNode,IvyNode evictedNode,IvyNode node){
  Collection blacklisted=new ArrayList();
  Caller[] callers=node.getAllCallers();
  String rootModuleConf=conflictParent.getData().getReport().getConfiguration();
  for (int i=0; i < callers.length; i++) {
    IvyNode callerNode=node.findNode(callers[i].getModuleRevisionId());
    if (callerNode.isBlacklisted(rootModuleConf)) {
      continue;
    }
    if (versionMatcher.isDynamic(callers[i].getAskedDependencyId())) {
      blacklisted.add(new IvyNodeBlacklist(conflictParent,selectedNode,evictedNode,node,rootModuleConf));
    }
 else {
      if (callerNode == null) {
        return null;
      }
      Collection sub=blackListIncompatibleCaller(versionMatcher,conflictParent,selectedNode,evictedNode,callerNode);
      if (sub == null) {
        return null;
      }
 else {
        blacklisted.addAll(sub);
      }
    }
  }
  if (blacklisted.isEmpty()) {
    return null;
  }
  return blacklisted;
}

Fixed version (ground truth):
/** 
 * Tries to blacklist exactly one version for all callers paths.
 * @param versionMatcher the version matcher to use to interpret versions
 * @param conflictParent the node in which the conflict is occurring
 * @param selectedNode the node in favor of which the conflict is resolved
 * @param evictedNode the node which will be evicted if we are able to blacklist all paths
 * @param node the node for which callers should be considered
 * @return the collection of blacklisting to do, null if a blacklist is not possible in at leastone caller path
 */
private Collection blackListIncompatibleCaller(VersionMatcher versionMatcher,IvyNode conflictParent,IvyNode selectedNode,IvyNode evictedNode,Stack callerStack){
  Collection blacklisted=new ArrayList();
  IvyNode node=(IvyNode)callerStack.peek();
  Caller[] callers=node.getAllCallers();
  String rootModuleConf=conflictParent.getData().getReport().getConfiguration();
  for (int i=0; i < callers.length; i++) {
    IvyNode callerNode=node.findNode(callers[i].getModuleRevisionId());
    if (callerNode.isBlacklisted(rootModuleConf)) {
      continue;
    }
    if (versionMatcher.isDynamic(callers[i].getAskedDependencyId())) {
      blacklisted.add(new IvyNodeBlacklist(conflictParent,selectedNode,evictedNode,node,rootModuleConf));
    }
 else {
      if (callerNode == null) {
        return null;
      }
      if (!callerStack.contains(callerNode)) {
        callerStack.push(callerNode);
        Collection sub=blackListIncompatibleCaller(versionMatcher,conflictParent,selectedNode,evictedNode,callerStack);
        callerStack.pop();
        if (sub == null) {
          return null;
        }
 else {
          blacklisted.addAll(sub);
        }
      }
 else {
      }
    }
  }
  if (blacklisted.isEmpty()) {
    return null;
  }
  return blacklisted;
}