Program: 75002
Project: 75002
Buggy source:
/** 
 * Handle an attribute assignment that is part of an XML element. This method is called prior to the corresponding startElement() call, so it simply accumulates attributes in a hashtable for use by startElement().
 * @param name The name of the attribute.
 * @param value The value of the attribute, or null if the attributeis <code>#IMPLIED</code> and not specified.
 * @param specified True if the value is specified, false if thevalue comes from the default value in the DTD rather than from the XML file.
 * @exception XmlException If the name or value is null.
 */
public void attribute(String name,String value,boolean specified) throws XmlException {
  if (name == null) {
    throw new XmlException("String_Node_Str",_currentExternalEntity(),_parser.getLineNumber(),_parser.getColumnNumber());
  }
  if (_namespace.equals(_AUTO_NAMESPACE) && (_current != null) && (name.equals("String_Node_Str") || name.equals("String_Node_Str") || name.equals("String_Node_Str")|| name.equals("String_Node_Str")|| name.equals("String_Node_Str"))) {
    boolean nameSeenAlready=false;
    if (_namespaceTranslationTable != null) {
      String prefix=value;
      String suffix="String_Node_Str";
      int period=-1;
      if (value != null) {
        period=value.indexOf("String_Node_Str");
      }
      if (period >= 0) {
        prefix=value.substring(0,period);
        suffix=value.substring(period);
      }
      String replacement=(String)_namespaceTranslationTable.get(prefix);
      if (replacement != null) {
        value=replacement + suffix;
        nameSeenAlready=true;
      }
    }
    if (!nameSeenAlready && name.equals("String_Node_Str")) {
      String oldValue=value;
      value=_current.uniqueName(oldValue);
      _namespaceTranslationTable.put(oldValue,value);
    }
  }
 else {
    if (!_namespace.equals(_DEFAULT_NAMESPACE) && !_namespace.equals(_AUTO_NAMESPACE) && (name.equals("String_Node_Str") || name.equals("String_Node_Str") || name.equals("String_Node_Str")|| name.equals("String_Node_Str")|| name.equals("String_Node_Str"))) {
      value=_namespace + "String_Node_Str" + value;
    }
  }
  if (_filterList != null) {
    String currentElement=_parser.getCurrentElement();
    Iterator filters=_filterList.iterator();
    String filteredValue=value;
    while (filters.hasNext()) {
      MoMLFilter filter=(MoMLFilter)filters.next();
      filteredValue=filter.filterAttributeValue(_current,currentElement,name,filteredValue);
    }
    if ((value != null) && (filteredValue == null)) {
      _skipElementIsNew=true;
      _skipElementName=currentElement;
      _skipElement++;
    }
    value=filteredValue;
  }
  _attributes.put(name,value);
  _attributeNameList.add(name);
}

Fixed version (ground truth):
/** 
 * Handle an attribute assignment that is part of an XML element. This method is called prior to the corresponding startElement() call, so it simply accumulates attributes in a hashtable for use by startElement().
 * @param name The name of the attribute.
 * @param value The value of the attribute, or null if the attributeis <code>#IMPLIED</code> and not specified.
 * @param specified True if the value is specified, false if thevalue comes from the default value in the DTD rather than from the XML file.
 * @exception XmlException If the name or value is null.
 */
public void attribute(String name,String value,boolean specified) throws XmlException {
  if (name == null) {
    throw new XmlException("String_Node_Str",_currentExternalEntity(),_parser.getLineNumber(),_parser.getColumnNumber());
  }
  if (_namespace.equals(_AUTO_NAMESPACE) && (_current != null) && (name.equals("String_Node_Str") || name.equals("String_Node_Str") || name.startsWith("String_Node_Str")|| name.equals("String_Node_Str")|| name.equals("String_Node_Str"))) {
    boolean nameSeenAlready=false;
    if (_namespaceTranslationTable != null) {
      String prefix=value;
      String suffix="String_Node_Str";
      int period=-1;
      if (value != null) {
        period=value.indexOf("String_Node_Str");
      }
      if (period >= 0) {
        prefix=value.substring(0,period);
        suffix=value.substring(period);
      }
      String replacement=(String)_namespaceTranslationTable.get(prefix);
      if (replacement != null) {
        value=replacement + suffix;
        nameSeenAlready=true;
      }
    }
    if (!nameSeenAlready && name.equals("String_Node_Str")) {
      String oldValue=value;
      value=_current.uniqueName(oldValue);
      _namespaceTranslationTable.put(oldValue,value);
    }
  }
 else {
    if (!_namespace.equals(_DEFAULT_NAMESPACE) && !_namespace.equals(_AUTO_NAMESPACE) && (name.equals("String_Node_Str") || name.equals("String_Node_Str") || name.equals("String_Node_Str")|| name.equals("String_Node_Str")|| name.equals("String_Node_Str"))) {
      value=_namespace + "String_Node_Str" + value;
    }
  }
  if (_filterList != null) {
    String currentElement=_parser.getCurrentElement();
    Iterator filters=_filterList.iterator();
    String filteredValue=value;
    while (filters.hasNext()) {
      MoMLFilter filter=(MoMLFilter)filters.next();
      filteredValue=filter.filterAttributeValue(_current,currentElement,name,filteredValue);
    }
    if ((value != null) && (filteredValue == null)) {
      _skipElementIsNew=true;
      _skipElementName=currentElement;
      _skipElement++;
    }
    value=filteredValue;
  }
  _attributes.put(name,value);
  _attributeNameList.add(name);
}