diff --git a/src/xercesc/dom/impl/DOMParentNode.cpp b/src/xercesc/dom/impl/DOMParentNode.cpp index 7323a8281dc0b27a4640da65252f9a382ac9d84f..efbc334c26b5c54efceea1dd2656fe4a15688e47 100644 --- a/src/xercesc/dom/impl/DOMParentNode.cpp +++ b/src/xercesc/dom/impl/DOMParentNode.cpp @@ -190,13 +190,16 @@ DOMNode *DOMParentNode::insertBefore(DOMNode *newChild, DOMNode *refChild) { // Prevent cycles in the tree - bool treeSafe=true; - for(DOMNode *a=castToNode(this)->getParentNode(); - treeSafe && a!=0; - a=a->getParentNode()) - treeSafe=(newChild!=a); - if(!treeSafe) - throw DOMException(DOMException::HIERARCHY_REQUEST_ERR,0); + //only need to do this if the node has children + if(newChild->hasChildNodes()) { + bool treeSafe=true; + for(DOMNode *a=castToNode(this)->getParentNode(); + treeSafe && a!=0; + a=a->getParentNode()) + treeSafe=(newChild!=a); + if(!treeSafe) + throw DOMException(DOMException::HIERARCHY_REQUEST_ERR,0); + } // refChild must in fact be a child of this node (or 0) if (refChild!=0 && refChild->getParentNode() != castToNode(this))