Program: 60109
Project: 60109
Buggy source:
/** 
 * This method provides an implementation XPathResult.evaluate according to the DOM L3 XPath Specification, Working Group Note 26 February 2004. <p> See also the <a href= 'http://www.w3.org/TR/2004/NOTE-DOM-Level-3-XPath-20040226'>Document Object Model (DOM) Level 3 XPath Specification</a>. </p> <p> Evaluates this XPath expression and returns a result. </p>
 * @param contextNode The <code>context</code> is context node for the evaluation of this XPath expression.If the XPathEvaluator was obtained by casting the <code>Document</code> then this must be owned by the same document and must be a <code>Document</code>, <code>Element</code>, <code>Attribute</code>, <code>Text</code>, <code>CDATASection</code>, <code>Comment</code>, <code>ProcessingInstruction</code>, or <code>XPathNamespace</code> node.If the context node is a <code>Text</code> or a <code>CDATASection</code>, then the context is interpreted as the whole logical text node as seen by XPath, unless the node is empty in which case it may not serve as the XPath context.
 * @param type If a specific <code>type</code> is specified, then the result will be coerced to return the specified type relying on XPath conversions and fail if the desired coercion is not possible. This must be one of the type codes of <code>XPathResult</code> .
 * @param result The <code>result</code> specifies a specific result object which may be reused and returned by this method. If this is specified as <code>null</code>or the implementation does not reuse the specified result, a new result object will be constructed and returned.For XPath 1.0 results, this object will be of type <code>XPathResult</code>.
 * @return The result of the evaluation of the XPath expression.For XPath1.0 results, this object will be of type <code>XPathResult</code> .
 * @exception XPathException TYPE_ERR: Raised if the result cannot be converted to return the specified type.
 * @exception DOMException WRONG_DOCUMENT_ERR: The Node is from a document that is not supported by the XPathEvaluator that created this <code>XPathExpression</code>. <br> NOT_SUPPORTED_ERR: The Node is not a type permitted as an XPath context node.
 * @see org.w3c.dom.xpath.XPathExpression#evaluate(Node,short,XPathResult)
 * @xsl.usage internal
 */
@Override public Object evaluate(Node contextNode,short type,Object result) throws XPathException, DOMException {
  if (m_doc != null) {
    if ((contextNode != m_doc) && (!contextNode.getOwnerDocument().equals(m_doc))) {
      String fmsg=XPATHMessages.createXPATHMessage(XPATHErrorResources.ER_WRONG_DOCUMENT,null);
      throw new DOMException(DOMException.WRONG_DOCUMENT_ERR,fmsg);
    }
    short nodeType=contextNode.getNodeType();
    if ((nodeType != Node.DOCUMENT_NODE) && (nodeType != Node.ELEMENT_NODE) && (nodeType != Node.ATTRIBUTE_NODE)&& (nodeType != Node.TEXT_NODE)&& (nodeType != Node.CDATA_SECTION_NODE)&& (nodeType != Node.COMMENT_NODE)&& (nodeType != Node.PROCESSING_INSTRUCTION_NODE)&& (nodeType != XPathNamespace.XPATH_NAMESPACE_NODE)) {
      String fmsg=XPATHMessages.createXPATHMessage(XPATHErrorResources.ER_WRONG_NODETYPE,null);
      throw new DOMException(DOMException.NOT_SUPPORTED_ERR,fmsg);
    }
  }
  if (!XPathResultImpl.isValidType(type)) {
    String fmsg=XPATHMessages.createXPATHMessage(XPATHErrorResources.ER_INVALID_XPATH_TYPE,new Object[]{new Integer(type)});
    throw new XPathException(XPathException.TYPE_ERR,fmsg);
  }
  XPathContext xpathSupport=new XPathContext(false);
  if (null != m_doc) {
    xpathSupport.getDTMHandleFromNode(m_doc);
  }
  XObject xobj=null;
  try {
    xobj=m_xpath.execute(xpathSupport,contextNode,null);
  }
 catch (  TransformerException te) {
    throw new XPathException(XPathException.INVALID_EXPRESSION_ERR,te.getMessageAndLocation());
  }
  return new XPathResultImpl(type,xobj,contextNode,m_xpath);
}

Fixed version (ground truth):
/** 
 * This method provides an implementation XPathResult.evaluate according to the DOM L3 XPath Specification, Working Group Note 26 February 2004. <p> See also the <a href= 'http://www.w3.org/TR/2004/NOTE-DOM-Level-3-XPath-20040226'>Document Object Model (DOM) Level 3 XPath Specification</a>. </p> <p> Evaluates this XPath expression and returns a result. </p>
 * @param contextNode The <code>context</code> is context node for the evaluation of this XPath expression.If the XPathEvaluator was obtained by casting the <code>Document</code> then this must be owned by the same document and must be a <code>Document</code>, <code>Element</code>, <code>Attribute</code>, <code>Text</code>, <code>CDATASection</code>, <code>Comment</code>, <code>ProcessingInstruction</code>, or <code>XPathNamespace</code> node.If the context node is a <code>Text</code> or a <code>CDATASection</code>, then the context is interpreted as the whole logical text node as seen by XPath, unless the node is empty in which case it may not serve as the XPath context.
 * @param type If a specific <code>type</code> is specified, then the result will be coerced to return the specified type relying on XPath conversions and fail if the desired coercion is not possible. This must be one of the type codes of <code>XPathResult</code> .
 * @param result The <code>result</code> specifies a specific result object which may be reused and returned by this method. If this is specified as <code>null</code>or the implementation does not reuse the specified result, a new result object will be constructed and returned.For XPath 1.0 results, this object will be of type <code>XPathResult</code>.
 * @return The result of the evaluation of the XPath expression.For XPath1.0 results, this object will be of type <code>XPathResult</code> .
 * @exception XPathException TYPE_ERR: Raised if the result cannot be converted to return the specified type.
 * @exception DOMException WRONG_DOCUMENT_ERR: The Node is from a document that is not supported by the XPathEvaluator that created this <code>XPathExpression</code>. <br> NOT_SUPPORTED_ERR: The Node is not a type permitted as an XPath context node.
 * @see org.w3c.dom.xpath.XPathExpression#evaluate(Node,short,Object)
 */
@Override public Object evaluate(Node contextNode,short type,Object result) throws XPathException, DOMException {
  if (m_doc != null) {
    if ((contextNode != m_doc) && (!contextNode.getOwnerDocument().equals(m_doc))) {
      String fmsg=XPATHMessages.createXPATHMessage(XPATHErrorResources.ER_WRONG_DOCUMENT,null);
      throw new DOMException(DOMException.WRONG_DOCUMENT_ERR,fmsg);
    }
    short nodeType=contextNode.getNodeType();
    if ((nodeType != Node.DOCUMENT_NODE) && (nodeType != Node.ELEMENT_NODE) && (nodeType != Node.ATTRIBUTE_NODE)&& (nodeType != Node.TEXT_NODE)&& (nodeType != Node.CDATA_SECTION_NODE)&& (nodeType != Node.COMMENT_NODE)&& (nodeType != Node.PROCESSING_INSTRUCTION_NODE)&& (nodeType != XPathNamespace.XPATH_NAMESPACE_NODE)) {
      String fmsg=XPATHMessages.createXPATHMessage(XPATHErrorResources.ER_WRONG_NODETYPE,null);
      throw new DOMException(DOMException.NOT_SUPPORTED_ERR,fmsg);
    }
  }
  if (!XPathResultImpl.isValidType(type)) {
    String fmsg=XPATHMessages.createXPATHMessage(XPATHErrorResources.ER_INVALID_XPATH_TYPE,new Object[]{new Integer(type)});
    throw new XPathException(XPathException.TYPE_ERR,fmsg);
  }
  XPathContext xpathSupport=new XPathContext(false);
  if (null != m_doc) {
    xpathSupport.getDTMHandleFromNode(m_doc);
  }
  XObject xobj=null;
  try {
    xobj=m_xpath.execute(xpathSupport,contextNode,null);
  }
 catch (  TransformerException te) {
    throw new XPathException(XPathException.INVALID_EXPRESSION_ERR,te.getMessageAndLocation());
  }
  return new XPathResultImpl(type,xobj,contextNode,m_xpath);
}