You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@xerces.apache.org by tn...@apache.org on 2002/09/17 14:42:22 UTC
cvs commit: xml-xerces/c/src/xercesc/dom/impl DOMDocumentImpl.cpp
tng 2002/09/17 05:42:22
Modified: c/src/xercesc/dom/impl DOMDocumentImpl.cpp
Log:
DOM Fix:
1. Make sure the passed in name is not null before creating the node.
2. Also allow replacing a document type node.
Revision Changes Path
1.22 +28 -14 xml-xerces/c/src/xercesc/dom/impl/DOMDocumentImpl.cpp
Index: DOMDocumentImpl.cpp
===================================================================
RCS file: /home/cvs/xml-xerces/c/src/xercesc/dom/impl/DOMDocumentImpl.cpp,v
retrieving revision 1.21
retrieving revision 1.22
diff -u -r1.21 -r1.22
--- DOMDocumentImpl.cpp 21 Aug 2002 20:58:31 -0000 1.21
+++ DOMDocumentImpl.cpp 17 Sep 2002 12:42:21 -0000 1.22
@@ -261,7 +261,7 @@
DOMAttr *DOMDocumentImpl::createAttribute(const XMLCh *nam)
{
- if(!isXMLName(nam))
+ if(!nam || !isXMLName(nam))
throw DOMException(DOMException::INVALID_CHARACTER_ERR,0);
return new (this, DOMDocumentImpl::ATTR_OBJECT) DOMAttrImpl(this,nam);
};
@@ -290,7 +290,7 @@
DOMDocumentType *DOMDocumentImpl::createDocumentType(const XMLCh *nam)
{
- if (!isXMLName(nam))
+ if (!nam || !isXMLName(nam))
throw DOMException(
DOMException::INVALID_CHARACTER_ERR, 0);
@@ -304,7 +304,7 @@
const XMLCh *publicId,
const XMLCh *systemId)
{
- if (!isXMLName(qualifiedName))
+ if (!qualifiedName || !isXMLName(qualifiedName))
throw DOMException(
DOMException::INVALID_CHARACTER_ERR, 0);
@@ -315,7 +315,7 @@
DOMElement *DOMDocumentImpl::createElement(const XMLCh *tagName)
{
- if(!isXMLName(tagName))
+ if(!tagName || !isXMLName(tagName))
throw DOMException(DOMException::INVALID_CHARACTER_ERR,0);
return new (this, DOMDocumentImpl::ELEMENT_OBJECT) DOMElementImpl(this,tagName);
@@ -332,7 +332,7 @@
DOMEntity *DOMDocumentImpl::createEntity(const XMLCh *nam)
{
- if (!isXMLName(nam))
+ if (!nam || !isXMLName(nam))
throw DOMException(
DOMException::INVALID_CHARACTER_ERR, 0);
@@ -343,7 +343,7 @@
DOMEntityReference *DOMDocumentImpl::createEntityReference(const XMLCh *nam)
{
- if (!isXMLName(nam))
+ if (!nam || !isXMLName(nam))
throw DOMException(
DOMException::INVALID_CHARACTER_ERR, 0);
@@ -354,7 +354,7 @@
DOMNotation *DOMDocumentImpl::createNotation(const XMLCh *nam)
{
- if (!isXMLName(nam))
+ if (!nam || !isXMLName(nam))
throw DOMException(
DOMException::INVALID_CHARACTER_ERR, 0);
@@ -366,7 +366,7 @@
DOMProcessingInstruction *DOMDocumentImpl::createProcessingInstruction(
const XMLCh *target, const XMLCh *data)
{
- if(!isXMLName(target))
+ if(!target || !isXMLName(target))
throw DOMException(DOMException::INVALID_CHARACTER_ERR,0);
return new (this, DOMDocumentImpl::PROCESSING_INSTRUCTION_OBJECT) DOMProcessingInstructionImpl(this,target,data);
};
@@ -431,6 +431,10 @@
)
throw DOMException(DOMException::HIERARCHY_REQUEST_ERR,0);
+ // if the newChild is a documenttype node created from domimplementation, set the ownerDoc first
+ if ((newChild->getNodeType() == DOMNode::DOCUMENT_TYPE_NODE) && !newChild->getOwnerDocument())
+ ((DOMDocumentTypeImpl*)newChild)->setOwnerDocument(this);
+
fParent.insertBefore(newChild,refChild);
// If insert succeeded, cache the kid appropriately
@@ -443,6 +447,18 @@
};
+DOMNode* DOMDocumentImpl::replaceChild(DOMNode *newChild, DOMNode *oldChild) {
+ if(oldChild->getNodeType() == DOMNode::DOCUMENT_TYPE_NODE)
+ fDocType=0;
+
+ insertBefore(newChild, oldChild);
+ // changed() already done.
+
+ if(oldChild->getNodeType() == DOMNode::DOCUMENT_TYPE_NODE)
+ return fParent.removeChild(oldChild);
+ else
+ return removeChild(oldChild);
+}
bool DOMDocumentImpl::isXMLName(const XMLCh *s)
{
@@ -493,7 +509,7 @@
DOMElement *DOMDocumentImpl::createElementNS(const XMLCh *fNamespaceURI,
const XMLCh *qualifiedName)
{
- if(!isXMLName(qualifiedName))
+ if(!qualifiedName || !isXMLName(qualifiedName))
throw DOMException(DOMException::INVALID_CHARACTER_ERR,0);
//XMLCh * pooledTagName = this->fNamePool->getPooledString(qualifiedName);
return new (this, DOMDocumentImpl::ELEMENT_NS_OBJECT) DOMElementNSImpl(this, fNamespaceURI, qualifiedName);
@@ -504,7 +520,7 @@
const XMLSSize_t lineNo,
const XMLSSize_t columnNo)
{
- if(!isXMLName(qualifiedName))
+ if(!qualifiedName || !isXMLName(qualifiedName))
throw DOMException(DOMException::INVALID_CHARACTER_ERR,0);
return new (this) XSDElementNSImpl(this, fNamespaceURI, qualifiedName, lineNo, columnNo);
@@ -514,7 +530,7 @@
DOMAttr *DOMDocumentImpl::createAttributeNS(const XMLCh *fNamespaceURI,
const XMLCh *qualifiedName)
{
- if(!isXMLName(qualifiedName))
+ if(!qualifiedName || !isXMLName(qualifiedName))
throw DOMException(DOMException::INVALID_CHARACTER_ERR,0);
return new (this, DOMDocumentImpl::ATTR_NS_OBJECT) DOMAttrNSImpl(this, fNamespaceURI, qualifiedName);
}
@@ -667,8 +683,6 @@
DOMNode* DOMDocumentImpl::getPreviousSibling() const {return fNode.getPreviousSibling (); };
bool DOMDocumentImpl::hasChildNodes() const {return fParent.hasChildNodes (); };
void DOMDocumentImpl::normalize() {fParent.normalize (); };
- DOMNode* DOMDocumentImpl::replaceChild(DOMNode *newChild, DOMNode *oldChild)
- {return fParent.replaceChild (newChild, oldChild); };
bool DOMDocumentImpl::isSupported(const XMLCh *feature, const XMLCh *version) const
{return fNode.isSupported (feature, version); };
void DOMDocumentImpl::setPrefix(const XMLCh *prefix) {fNode.setPrefix(prefix); };
---------------------------------------------------------------------
To unsubscribe, e-mail: xerces-cvs-unsubscribe@xml.apache.org
For additional commands, e-mail: xerces-cvs-help@xml.apache.org