Fix crasher in key()'s when context-node is a document.

b=120074 r=Pike,peterv sr=jst
This commit is contained in:
sicking%bigfoot.com 2002-01-15 22:20:30 +00:00
parent b9171e8d88
commit 01b7208527

View File

@ -72,18 +72,24 @@ ExprResult* txKeyFunctionCall::evaluate(Node* aContext, ContextState* aCs)
if (!exprResult)
return res;
Document* contextDoc;
if (aContext->getNodeType() == Node::DOCUMENT_NODE)
contextDoc = (Document*)aContext;
else
contextDoc = aContext->getOwnerDocument();
if (exprResult->getResultType() == ExprResult::NODESET) {
NodeSet* nodeSet = (NodeSet*) exprResult;
for (int i=0; i<nodeSet->size(); i++) {
String val;
XMLDOMUtils::getNodeValue(nodeSet->get(i), &val);
key->getNodes(val,aContext->getOwnerDocument())->copyInto(*res);
key->getNodes(val,contextDoc)->copyInto(*res);
}
}
else {
String val;
exprResult->stringValue(val);
key->getNodes(val,aContext->getOwnerDocument())->copyInto(*res);
key->getNodes(val,contextDoc)->copyInto(*res);
}
delete exprResult;
return res;
@ -124,6 +130,10 @@ txXSLKey::~txXSLKey()
*/
const NodeSet* txXSLKey::getNodes(String& aKeyValue, Document* aDoc)
{
NS_ASSERTION(aDoc, "missing document");
if (!aDoc)
return &mEmptyNodeset;
NamedMap* map = (NamedMap*)mMaps.get(aDoc);
if (!map) {
map = addDocument(aDoc);