diff --git a/src/xercesc/dom/NamedNodeMapImpl.cpp b/src/xercesc/dom/NamedNodeMapImpl.cpp index 5b6ced9642568f76ea534f158d7fc668076f52fa..df58808ae2fe3818cebbc32bde8be7e5e72d47a9 100644 --- a/src/xercesc/dom/NamedNodeMapImpl.cpp +++ b/src/xercesc/dom/NamedNodeMapImpl.cpp @@ -268,7 +268,7 @@ NodeImpl * NamedNodeMapImpl::setNamedItem(NodeImpl * arg) throw DOM_DOMException(DOM_DOMException::WRONG_DOCUMENT_ERR,null); if (readOnly) throw DOM_DOMException(DOM_DOMException::NO_MODIFICATION_ALLOWED_ERR, null); - if (arg->isOwned()) + if ((arg->getNodeType() == DOM_Node::ATTRIBUTE_NODE) && arg->isOwned() && (arg->ownerNode != ownerNode)) throw DOM_DOMException(DOM_DOMException::INUSE_ATTRIBUTE_ERR,null); arg->ownerNode = ownerNode; diff --git a/src/xercesc/idom/IDNamedNodeMapImpl.cpp b/src/xercesc/idom/IDNamedNodeMapImpl.cpp index afd23c57356cc20d75527ddd6e36ad1a141c732f..fcbbad510ca70d83024809f4b9dc485682a86939 100644 --- a/src/xercesc/idom/IDNamedNodeMapImpl.cpp +++ b/src/xercesc/idom/IDNamedNodeMapImpl.cpp @@ -243,15 +243,16 @@ IDOM_Node * IDNamedNodeMapImpl::removeNamedItem(const XMLCh *name) IDOM_Node * IDNamedNodeMapImpl::setNamedItem(IDOM_Node * arg) { IDOM_Document *doc = fOwnerNode->getOwnerDocument(); - if(castToNodeImpl(arg)->getOwnerDocument() != doc) + IDNodeImpl *argImpl = castToNodeImpl(arg); + if(argImpl->getOwnerDocument() != doc) throw IDOM_DOMException(IDOM_DOMException::WRONG_DOCUMENT_ERR,0); if (this->readOnly()) throw IDOM_DOMException(IDOM_DOMException::NO_MODIFICATION_ALLOWED_ERR, 0); - if (castToNodeImpl(arg)->isOwned()) + if ((arg->getNodeType() == IDOM_Node::ATTRIBUTE_NODE) && argImpl->isOwned() && (argImpl->fOwnerNode != fOwnerNode)) throw IDOM_DOMException(IDOM_DOMException::INUSE_ATTRIBUTE_ERR,0); - castToNodeImpl(arg)->fOwnerNode = fOwnerNode; - castToNodeImpl(arg)->isOwned(true); + argImpl->fOwnerNode = fOwnerNode; + argImpl->isOwned(true); int i=findNamePoint(arg->getNodeName()); IDOM_Node * previous=0; if(i>=0) @@ -353,15 +354,16 @@ IDOM_Node *IDNamedNodeMapImpl::getNamedItemNS(const XMLCh *namespaceURI, IDOM_Node * IDNamedNodeMapImpl::setNamedItemNS(IDOM_Node *arg) { IDOM_Document *doc = fOwnerNode->getOwnerDocument(); - if (castToNodeImpl(arg)->getOwnerDocument() != doc) + IDNodeImpl *argImpl = castToNodeImpl(arg); + if (argImpl->getOwnerDocument() != doc) throw IDOM_DOMException(IDOM_DOMException::WRONG_DOCUMENT_ERR,0); if (this->readOnly()) throw IDOM_DOMException(IDOM_DOMException::NO_MODIFICATION_ALLOWED_ERR, 0); - if (castToNodeImpl(arg)->isOwned()) + if (argImpl->isOwned()) throw IDOM_DOMException(IDOM_DOMException::INUSE_ATTRIBUTE_ERR,0); - castToNodeImpl(arg)->fOwnerNode = fOwnerNode; - castToNodeImpl(arg)->isOwned(true); + argImpl->fOwnerNode = fOwnerNode; + argImpl->isOwned(true); int i=findNamePoint(arg->getNamespaceURI(), arg->getLocalName()); IDOM_Node *previous=0; if(i>=0) {