Program: 108662
Project: 108662
Buggy source:
/** 
 * Internal method for loading a project
 * @param path
 */
private void actionOpenProject(String path){
  if (!path.endsWith("String_Node_Str")) {
    path+="String_Node_Str";
  }
  WorkerLoad worker=null;
  try {
    worker=new WorkerLoad(path,this);
  }
 catch (  final IOException e) {
    main.showErrorDialog(main.getShell(),Resources.getMessage("String_Node_Str"),Resources.getMessage("String_Node_Str"),e);
    return;
  }
  main.showProgressDialog(Resources.getMessage("String_Node_Str"),worker);
  if (worker.getError() != null) {
    getResources().getLogger().info(worker.getError());
    main.showErrorDialog(main.getShell(),Resources.getMessage("String_Node_Str"),Resources.getMessage("String_Node_Str"),worker.getError());
    return;
  }
  reset();
  model=worker.getResult();
  model.setPath(path);
  final ModelNodeFilter tempNodeFilter=model.getNodeFilter();
  final String tempSelectedAttribute=model.getSelectedAttribute();
  final ARXNode tempSelectedNode=model.getSelectedNode();
  final Set<ARXNode> tempClipboard=new HashSet<ARXNode>();
  if (model.getClipboard() == null) {
    model.setClipboard(new HashSet<ARXNode>());
  }
 else {
    tempClipboard.addAll(model.getClipboard());
  }
  update(new ModelEvent(this,ModelPart.MODEL,model));
  if (model.getInputConfig().getInput() != null) {
    update(new ModelEvent(this,ModelPart.INPUT,model.getInputConfig().getInput().getHandle()));
  }
  if (model.getResult() != null) {
    update(new ModelEvent(this,ModelPart.RESULT,model.getResult()));
  }
  if (tempSelectedNode != null) {
    model.setSelectedNode(tempSelectedNode);
    update(new ModelEvent(this,ModelPart.SELECTED_NODE,model.getSelectedNode()));
    final DataHandle handle=model.getResult().getOutput(tempSelectedNode,false);
    model.setOutput(handle,tempSelectedNode);
    update(new ModelEvent(this,ModelPart.OUTPUT,handle));
  }
  if (tempNodeFilter != null) {
    model.setNodeFilter(tempNodeFilter);
    update(new ModelEvent(this,ModelPart.FILTER,tempNodeFilter));
  }
  if (model.getInputConfig() != null && model.getInputConfig().getInput() != null) {
    DataHandle handle=model.getInputConfig().getInput().getHandle();
    if (handle != null) {
      for (int i=0; i < handle.getNumColumns(); i++) {
        String attr=handle.getAttributeName(i);
        Hierarchy hierarchy=model.getInputConfig().getHierarchy(attr);
        if (hierarchy != null) {
          model.setSelectedAttribute(attr);
          update(new ModelEvent(this,ModelPart.HIERARCHY,hierarchy));
        }
      }
      if (handle.getNumColumns() > 0) {
        String attribute=handle.getAttributeName(0);
        model.setSelectedAttribute(attribute);
        update(new ModelEvent(this,ModelPart.SELECTED_ATTRIBUTE,attribute));
      }
    }
  }
  if (tempSelectedAttribute != null) {
    model.setSelectedAttribute(tempSelectedAttribute);
    update(new ModelEvent(this,ModelPart.SELECTED_ATTRIBUTE,tempSelectedAttribute));
  }
  if (tempClipboard != null) {
    model.getClipboard().clear();
    model.getClipboard().addAll(tempClipboard);
    update(new ModelEvent(this,ModelPart.CLIPBOARD,model.getClipboard()));
  }
  if (model.getInputConfig().getInput() != null) {
    final DataHandle handle=model.getInputConfig().getInput().getHandle();
    for (int i=0; i < handle.getNumColumns(); i++) {
      update(new ModelEvent(this,ModelPart.ATTRIBUTE_TYPE,handle.getAttributeName(i)));
    }
  }
  update(new ModelEvent(this,ModelPart.RESEARCH_SUBSET,model.getInputConfig().getResearchSubset()));
  if (model.getOutput() != null) {
    update(new ModelEvent(this,ModelPart.VIEW_CONFIG,model.getOutput()));
  }
  model.setUnmodified();
}

Fixed version (ground truth):
/** 
 * Internal method for loading a project
 * @param path
 */
private void actionOpenProject(String path){
  if (!path.endsWith("String_Node_Str")) {
    path+="String_Node_Str";
  }
  WorkerLoad worker=null;
  try {
    worker=new WorkerLoad(path,this);
  }
 catch (  final IOException e) {
    main.showInfoDialog(main.getShell(),Resources.getMessage("String_Node_Str"),e.getMessage());
    return;
  }
  main.showProgressDialog(Resources.getMessage("String_Node_Str"),worker);
  if (worker.getError() != null) {
    getResources().getLogger().info(worker.getError());
    main.showInfoDialog(main.getShell(),Resources.getMessage("String_Node_Str"),worker.getError().getMessage());
    return;
  }
  reset();
  model=worker.getResult();
  model.setPath(path);
  final ModelNodeFilter tempNodeFilter=model.getNodeFilter();
  final String tempSelectedAttribute=model.getSelectedAttribute();
  final ARXNode tempSelectedNode=model.getSelectedNode();
  final Set<ARXNode> tempClipboard=new HashSet<ARXNode>();
  if (model.getClipboard() == null) {
    model.setClipboard(new HashSet<ARXNode>());
  }
 else {
    tempClipboard.addAll(model.getClipboard());
  }
  update(new ModelEvent(this,ModelPart.MODEL,model));
  if (model.getInputConfig().getInput() != null) {
    update(new ModelEvent(this,ModelPart.INPUT,model.getInputConfig().getInput().getHandle()));
  }
  if (model.getResult() != null) {
    update(new ModelEvent(this,ModelPart.RESULT,model.getResult()));
  }
  if (tempSelectedNode != null) {
    model.setSelectedNode(tempSelectedNode);
    update(new ModelEvent(this,ModelPart.SELECTED_NODE,model.getSelectedNode()));
    final DataHandle handle=model.getResult().getOutput(tempSelectedNode,false);
    model.setOutput(handle,tempSelectedNode);
    update(new ModelEvent(this,ModelPart.OUTPUT,handle));
  }
  if (tempNodeFilter != null) {
    model.setNodeFilter(tempNodeFilter);
    update(new ModelEvent(this,ModelPart.FILTER,tempNodeFilter));
  }
  if (model.getInputConfig() != null && model.getInputConfig().getInput() != null) {
    DataHandle handle=model.getInputConfig().getInput().getHandle();
    if (handle != null) {
      for (int i=0; i < handle.getNumColumns(); i++) {
        String attr=handle.getAttributeName(i);
        Hierarchy hierarchy=model.getInputConfig().getHierarchy(attr);
        if (hierarchy != null) {
          model.setSelectedAttribute(attr);
          update(new ModelEvent(this,ModelPart.HIERARCHY,hierarchy));
        }
      }
      if (handle.getNumColumns() > 0) {
        String attribute=handle.getAttributeName(0);
        model.setSelectedAttribute(attribute);
        update(new ModelEvent(this,ModelPart.SELECTED_ATTRIBUTE,attribute));
      }
    }
  }
  if (tempSelectedAttribute != null) {
    model.setSelectedAttribute(tempSelectedAttribute);
    update(new ModelEvent(this,ModelPart.SELECTED_ATTRIBUTE,tempSelectedAttribute));
  }
  if (tempClipboard != null) {
    model.getClipboard().clear();
    model.getClipboard().addAll(tempClipboard);
    update(new ModelEvent(this,ModelPart.CLIPBOARD,model.getClipboard()));
  }
  if (model.getInputConfig().getInput() != null) {
    final DataHandle handle=model.getInputConfig().getInput().getHandle();
    for (int i=0; i < handle.getNumColumns(); i++) {
      update(new ModelEvent(this,ModelPart.ATTRIBUTE_TYPE,handle.getAttributeName(i)));
    }
  }
  update(new ModelEvent(this,ModelPart.RESEARCH_SUBSET,model.getInputConfig().getResearchSubset()));
  if (model.getOutput() != null) {
    update(new ModelEvent(this,ModelPart.VIEW_CONFIG,model.getOutput()));
  }
  model.setUnmodified();
}