Program: 75768
Project: 75768
Buggy source:
protected void flowThrough(Object inValue,Object d,Object outValue){
  GraphFlow in=(GraphFlow)inValue;
  GraphFlow out=(GraphFlow)outValue;
  Stmt unit=(Stmt)d;
  copy(inValue,outValue);
  if (_debug)   System.out.println("String_Node_Str" + d);
  Integer i=(Integer)_countMap.get(d);
  if (i == null) {
    _countMap.put(d,new Integer(1));
  }
 else {
    _countMap.put(d,new Integer(i.intValue() + 1));
  }
  if (unit.containsInvokeExpr()) {
    for (Iterator nodes=out.getNodes().iterator(); nodes.hasNext(); ) {
      Object node=nodes.next();
      if (node instanceof SootField) {
        SootField field=(SootField)node;
        boolean targetsAreInDifferentClass=true;
        if (field.isPrivate() && targetsAreInDifferentClass) {
          continue;
        }
 else         if (Modifier.isFinal(field.getModifiers())) {
          continue;
        }
 else {
          if (_debug) {
            System.out.println("String_Node_Str" + unit + "String_Node_Str"+ field);
          }
          _setCanPointToAnything(out,node);
        }
      }
    }
  }
  if (unit instanceof DefinitionStmt) {
    DefinitionStmt assignStmt=(DefinitionStmt)unit;
    Value lvalue=assignStmt.getLeftOp();
    Value rvalue=assignStmt.getRightOp();
    if (_debug) {
    }
    if (_isAliasableType(lvalue.getType())) {
      Object lobject=_getAliasObject(lvalue,out);
      Object robject=_getAliasObject(rvalue,out);
      if (!out.containsNode(lobject)) {
        out.addNode(lobject);
      }
      if (!out.containsNode(robject) && robject != null) {
        out.addNode(robject);
      }
      if (robject == null) {
      }
 else {
        _setCanPointTo(out,lobject,robject);
      }
    }
  }
  if (_debug)   System.out.println("String_Node_Str" + out);
}

Fixed version (ground truth):
protected void flowThrough(Object inValue,Object d,Object outValue){
  GraphFlow in=(GraphFlow)inValue;
  GraphFlow out=(GraphFlow)outValue;
  Stmt unit=(Stmt)d;
  copy(inValue,outValue);
  if (_debug)   System.out.println("String_Node_Str" + d);
  if (_debug) {
    Integer i=(Integer)_countMap.get(d);
    if (i == null) {
      _countMap.put(d,new Integer(1));
    }
 else {
      _countMap.put(d,new Integer(i.intValue() + 1));
    }
  }
  if (unit.containsInvokeExpr()) {
    for (Iterator nodes=out.getNodes().iterator(); nodes.hasNext(); ) {
      Object node=nodes.next();
      if (node instanceof SootField) {
        SootField field=(SootField)node;
        if (field.isPrivate()) {
          continue;
        }
        if (Modifier.isFinal(field.getModifiers())) {
          continue;
        }
        if (_debug) {
          System.out.println("String_Node_Str" + unit + "String_Node_Str"+ field);
        }
        _setCanPointToAnything(out,node);
      }
    }
  }
  if (unit instanceof DefinitionStmt) {
    DefinitionStmt assignStmt=(DefinitionStmt)unit;
    Value lvalue=assignStmt.getLeftOp();
    Value rvalue=assignStmt.getRightOp();
    if (_debug) {
    }
    if (_isAliasableType(lvalue.getType())) {
      Object lobject=_getAliasObject(lvalue,out);
      Object robject=_getAliasObject(rvalue,out);
      if (!out.containsNode(lobject)) {
        out.addNode(lobject);
      }
      if (!out.containsNode(robject) && robject != null) {
        out.addNode(robject);
      }
      if (robject == null) {
      }
 else {
        _setCanPointTo(out,lobject,robject);
      }
    }
  }
  if (_debug)   System.out.println("String_Node_Str" + out);
}