Program: 180372
Project: 180372
Buggy source:
public static ParasimDescriptor fromXMLFile(String propertyName,String defaultPath) throws IOException, SAXException {
  File configFile=loadFileDescriptor(propertyName,defaultPath);
  Document dom=getBuilder().parse(configFile);
  NodeList extensions=dom.getElementsByTagName("String_Node_Str");
  ParasimDescriptorImpl descriptor=new ParasimDescriptorImpl();
  for (int i=0; i < extensions.getLength(); i++) {
    String qualifier=extensions.item(i).getAttributes().getNamedItem("String_Node_Str").getTextContent();
    if (qualifier == null) {
      throw new IOException("String_Node_Str");
    }
    ExtensionDescriptor extensionDescriptor=new ExtensionDescriptorImpl(qualifier);
    for (int j=0; j < extensions.item(i).getChildNodes().getLength(); j++) {
      Node property=extensions.item(i).getChildNodes().item(j);
      if (!property.getNodeName().equals("String_Node_Str")) {
        continue;
      }
      String name=property.getAttributes().getNamedItem("String_Node_Str").getTextContent();
      if (name == null) {
        throw new IOException("String_Node_Str" + qualifier + "String_Node_Str");
      }
      if (isArray(property)) {
        List<String> values=new ArrayList<String>();
        for (int k=0; k < property.getChildNodes().getLength(); k++) {
          Node value=property.getChildNodes().item(k);
          if (!value.getNodeName().equals("String_Node_Str")) {
            continue;
          }
          values.add(value.getTextContent());
        }
        String[] valuesInArray=new String[values.size()];
        values.toArray(valuesInArray);
        extensionDescriptor.setProperty(name,valuesInArray);
      }
 else {
        String value=property.getTextContent();
        extensionDescriptor.setProperty(name,value);
      }
    }
    descriptor.extensions.put(qualifier,extensionDescriptor);
  }
  return descriptor;
}

Fixed version (ground truth):
public static ParasimDescriptor fromXMLFile(String propertyName,String defaultPath) throws IOException, SAXException {
  File configFile=loadFileDescriptor(propertyName,defaultPath);
  Document dom=getBuilder().parse(configFile);
  NodeList extensions=dom.getElementsByTagName("String_Node_Str");
  ParasimDescriptorImpl descriptor=new ParasimDescriptorImpl();
  for (int i=0; i < extensions.getLength(); i++) {
    String qualifier=extensions.item(i).getAttributes().getNamedItem("String_Node_Str").getTextContent();
    if (qualifier == null) {
      throw new IOException("String_Node_Str");
    }
    ExtensionDescriptor extensionDescriptor=new ExtensionDescriptorImpl(qualifier);
    for (int j=0; j < extensions.item(i).getChildNodes().getLength(); j++) {
      Node property=extensions.item(i).getChildNodes().item(j);
      if (!property.getNodeName().equals("String_Node_Str")) {
        continue;
      }
      String name=property.getAttributes().getNamedItem("String_Node_Str").getTextContent();
      if (name == null) {
        throw new IOException("String_Node_Str" + qualifier + "String_Node_Str");
      }
      if (isArray(property)) {
        List<String> values=new ArrayList<String>();
        for (int k=0; k < property.getChildNodes().getLength(); k++) {
          Node value=property.getChildNodes().item(k);
          if (!value.getNodeName().equals("String_Node_Str")) {
            continue;
          }
          values.add(value.getTextContent());
        }
        String[] valuesInArray=new String[values.size()];
        values.toArray(valuesInArray);
        extensionDescriptor.setProperty(name,valuesInArray);
      }
 else {
        String value=property.getTextContent().trim();
        extensionDescriptor.setProperty(name,value);
      }
    }
    descriptor.extensions.put(qualifier,extensionDescriptor);
  }
  return descriptor;
}