Program: 118977
Project: 118977
Buggy source:
private void getMatchingNodes(String componentName,List<INode> matchingNodes,List<INode> generatingNodes){
  for (  INode node : generatingNodes) {
    if (node.isActivate()) {
      if (componentName == null) {
        addNodeIfNotInTheList(matchingNodes,node);
      }
 else       if (componentName.startsWith("String_Node_Str")) {
        String familly=componentName.substring("String_Node_Str".length());
        if (node.getComponent().getOriginalFamilyName().startsWith(familly)) {
          addNodeIfNotInTheList(matchingNodes,node);
        }
      }
 else       if (componentName.startsWith("String_Node_Str")) {
        Perl5Matcher matcher=new Perl5Matcher();
        Perl5Compiler compiler=new Perl5Compiler();
        Pattern pattern;
        String regexp=componentName.substring("String_Node_Str".length());
        try {
          pattern=compiler.compile(regexp);
          if (matcher.matches(node.getComponent().getName(),pattern)) {
            addNodeIfNotInTheList(matchingNodes,node);
          }
        }
 catch (        MalformedPatternException e) {
          throw new RuntimeException(e);
        }
      }
 else       if ((node.getComponent().getName() != null)) {
        if (node.getComponent().getName().compareTo(componentName) == 0) {
          addNodeIfNotInTheList(matchingNodes,node);
        }
 else         if (node.getComponent() instanceof EmfComponent) {
          EmfComponent component=(EmfComponent)node.getComponent();
          String eqCompName=component.getEquivalent();
          if (componentName.equals(eqCompName)) {
            addNodeIfNotInTheList(matchingNodes,node);
          }
        }
      }
    }
  }
}

Fixed version (ground truth):
private void getMatchingNodes(String componentName,List<INode> matchingNodes,List<INode> generatingNodes){
  for (  INode node : new ArrayList<>(generatingNodes)) {
    if (node.isActivate()) {
      if (componentName == null) {
        addNodeIfNotInTheList(matchingNodes,node);
      }
 else       if (componentName.startsWith("String_Node_Str")) {
        String familly=componentName.substring("String_Node_Str".length());
        if (node.getComponent().getOriginalFamilyName().startsWith(familly)) {
          addNodeIfNotInTheList(matchingNodes,node);
        }
      }
 else       if (componentName.startsWith("String_Node_Str")) {
        Perl5Matcher matcher=new Perl5Matcher();
        Perl5Compiler compiler=new Perl5Compiler();
        Pattern pattern;
        String regexp=componentName.substring("String_Node_Str".length());
        try {
          pattern=compiler.compile(regexp);
          if (matcher.matches(node.getComponent().getName(),pattern)) {
            addNodeIfNotInTheList(matchingNodes,node);
          }
        }
 catch (        MalformedPatternException e) {
          throw new RuntimeException(e);
        }
      }
 else       if ((node.getComponent().getName() != null)) {
        if (node.getComponent().getName().compareTo(componentName) == 0) {
          addNodeIfNotInTheList(matchingNodes,node);
        }
 else         if (node.getComponent() instanceof EmfComponent) {
          EmfComponent component=(EmfComponent)node.getComponent();
          String eqCompName=component.getEquivalent();
          if (componentName.equals(eqCompName)) {
            addNodeIfNotInTheList(matchingNodes,node);
          }
        }
      }
    }
  }
}