Program: 75009
Project: 75009
Buggy source:
/** 
 * Return a description of the object.  The level of detail depends on the argument, which is an or-ing of the static final constants defined in the NamedObj class.  Lines are indented according to to the level argument using the protected method _getIndentPrefix(). Zero, one or two brackets can be specified to surround the returned description.  If one is specified it is the the leading bracket. This is used by derived classes that will append to the description. Those derived classes are responsible for the closing bracket. An argument other than 0, 1, or 2 is taken to be equivalent to 0. This method is read-synchronized on the workspace.
 * @param detail The level of detail.
 * @param indent The amount of indenting.
 * @param bracket The number of surrounding brackets (0, 1, or 2).
 * @return A description of the object.
 */
protected String _description(int detail,int indent,int bracket){
  try {
    _workspace.getReadAccess();
    StringBuffer result=new StringBuffer();
    if ((bracket == 1) || (bracket == 2)) {
      result.append(super._description(detail,indent,1));
    }
 else {
      result.append(super._description(detail,indent,0));
    }
    if ((detail & LINKS) != 0) {
      if (result.trim().length() > 0) {
        result.append("String_Node_Str");
      }
      detail&=~LINKS;
      result.append("String_Node_Str");
      Enumeration links=_linkList.getContainers();
      while (links.hasMoreElements()) {
        Object object=links.nextElement();
        if (object instanceof Port) {
          result.append((((Port)object)._description(detail,indent + 1,2) + "String_Node_Str"));
        }
 else {
          result.append((((Relation)object)._description(detail,indent + 1,2) + "String_Node_Str"));
        }
      }
      result.append((_getIndentPrefix(indent) + "String_Node_Str"));
    }
    if (bracket == 2) {
      result.append("String_Node_Str");
    }
    return result.toString();
  }
  finally {
    _workspace.doneReading();
  }
}

Fixed version (ground truth):
/** 
 * Return a description of the object.  The level of detail depends on the argument, which is an or-ing of the static final constants defined in the NamedObj class.  Lines are indented according to to the level argument using the protected method _getIndentPrefix(). Zero, one or two brackets can be specified to surround the returned description.  If one is specified it is the the leading bracket. This is used by derived classes that will append to the description. Those derived classes are responsible for the closing bracket. An argument other than 0, 1, or 2 is taken to be equivalent to 0. This method is read-synchronized on the workspace.
 * @param detail The level of detail.
 * @param indent The amount of indenting.
 * @param bracket The number of surrounding brackets (0, 1, or 2).
 * @return A description of the object.
 */
protected String _description(int detail,int indent,int bracket){
  try {
    _workspace.getReadAccess();
    StringBuffer result=new StringBuffer();
    if ((bracket == 1) || (bracket == 2)) {
      result.append(super._description(detail,indent,1));
    }
 else {
      result.append(super._description(detail,indent,0));
    }
    if ((detail & LINKS) != 0) {
      if (result.toString().trim().length() > 0) {
        result.append("String_Node_Str");
      }
      detail&=~LINKS;
      result.append("String_Node_Str");
      Enumeration links=_linkList.getContainers();
      while (links.hasMoreElements()) {
        Object object=links.nextElement();
        if (object instanceof Port) {
          result.append((((Port)object)._description(detail,indent + 1,2) + "String_Node_Str"));
        }
 else {
          result.append((((Relation)object)._description(detail,indent + 1,2) + "String_Node_Str"));
        }
      }
      result.append((_getIndentPrefix(indent) + "String_Node_Str"));
    }
    if (bracket == 2) {
      result.append("String_Node_Str");
    }
    return result.toString();
  }
  finally {
    _workspace.doneReading();
  }
}