You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@xerces.apache.org by am...@apache.org on 2005/01/14 11:37:44 UTC
cvs commit: xml-xerces/c/src/xercesc/dom/deprecated DOMParser.cpp EntityImpl.cpp EntityImpl.hpp EntityReferenceImpl.cpp
amassari 2005/01/14 02:37:44
Modified: c/src/xercesc/dom/deprecated DOMParser.cpp EntityImpl.cpp
EntityImpl.hpp EntityReferenceImpl.cpp
Log:
When entity reference creation was on, the document created by the parser was leaked (jira# 490)
Revision Changes Path
1.35 +6 -9 xml-xerces/c/src/xercesc/dom/deprecated/DOMParser.cpp
Index: DOMParser.cpp
===================================================================
RCS file: /home/cvs/xml-xerces/c/src/xercesc/dom/deprecated/DOMParser.cpp,v
retrieving revision 1.34
retrieving revision 1.35
diff -u -r1.34 -r1.35
--- DOMParser.cpp 7 Jan 2005 14:38:22 -0000 1.34
+++ DOMParser.cpp 14 Jan 2005 10:37:08 -0000 1.35
@@ -682,11 +682,15 @@
}
-void DOMParser::endEntityReference(const XMLEntityDecl& /*entDecl*/)
+void DOMParser::endEntityReference(const XMLEntityDecl& entDecl)
{
if (fCreateEntityReferenceNodes == true)
{
if (fCurrentParent.getNodeType() == DOM_Node::ENTITY_REFERENCE_NODE) {
+ // stick the parsed content of this entity reference into the entity definition node
+ EntityImpl* entity = (EntityImpl*)fDocumentType->entities->getNamedItem(entDecl.getName());
+ entity->setEntityRef((EntityReferenceImpl*)fCurrentParent.fImpl);
+
((DOM_EntityReference&)fCurrentParent).fImpl->setReadOnly(true, true);
}
fCurrentParent = fNodeStack->pop();
@@ -868,13 +872,6 @@
fNodeStack->push(fCurrentParent);
fCurrentParent = er;
fCurrentNode = er;
-
- // this entityRef needs to be stored in Entity map too.
- // We'd decide later whether the entity nodes should be created by a
- // separated method in parser or not. For now just stick it in if
- // the ref nodes are created
- EntityImpl* entity = (EntityImpl*)fDocumentType->entities->getNamedItem(entName);
- entity->setEntityRef((EntityReferenceImpl*)er.fImpl);
}
}
1.6 +20 -73 xml-xerces/c/src/xercesc/dom/deprecated/EntityImpl.cpp
Index: EntityImpl.cpp
===================================================================
RCS file: /home/cvs/xml-xerces/c/src/xercesc/dom/deprecated/EntityImpl.cpp,v
retrieving revision 1.5
retrieving revision 1.6
diff -u -r1.5 -r1.6
--- EntityImpl.cpp 8 Sep 2004 13:55:43 -0000 1.5
+++ EntityImpl.cpp 14 Jan 2005 10:37:15 -0000 1.6
@@ -27,13 +27,11 @@
EntityImpl::EntityImpl(DocumentImpl *ownerDoc, const DOMString &eName)
- : ParentNode(ownerDoc),
- refEntity(0)
-
+ : ParentNode(ownerDoc)
{
name = eName.clone();
setReadOnly(true, true);
-};
+}
EntityImpl::EntityImpl(const EntityImpl &other, bool deep)
@@ -46,126 +44,75 @@
systemId = other.systemId.clone();
notationName = other.notationName.clone();
- RefCountedImpl::removeRef(refEntity);
- refEntity = other.refEntity;
- RefCountedImpl::addRef(other.refEntity);
-
setReadOnly(true, true);
-};
+}
EntityImpl::~EntityImpl() {
-};
+}
NodeImpl *EntityImpl::cloneNode(bool deep)
{
return new (getOwnerDocument()->getMemoryManager()) EntityImpl(*this, deep);
-};
+}
DOMString EntityImpl::getNodeName() {
return name;
-};
+}
short EntityImpl::getNodeType() {
return DOM_Node::ENTITY_NODE;
-};
+}
DOMString EntityImpl::getNotationName()
{
return notationName;
-};
+}
DOMString EntityImpl::getPublicId() {
return publicId;
-};
+}
DOMString EntityImpl::getSystemId()
{
return systemId;
-};
+}
void EntityImpl::setNotationName(const DOMString &arg)
{
notationName = arg;
-};
+}
void EntityImpl::setPublicId(const DOMString &arg)
{
publicId = arg;
-};
+}
void EntityImpl::setSystemId(const DOMString &arg)
{
systemId = arg;
-};
-
-void EntityImpl::setEntityRef(EntityReferenceImpl* other)
-{
- RefCountedImpl::removeRef(refEntity);
- refEntity = other;
- RefCountedImpl::addRef(other);
-}
-
-EntityReferenceImpl* EntityImpl::getEntityRef() const
-{
- return refEntity;
}
-void EntityImpl::cloneEntityRefTree()
+void EntityImpl::setEntityRef(EntityReferenceImpl* refEntity)
{
- //lazily clone the entityRef tree to this entity
- if (firstChild != 0)
- return;
+ if (firstChild != 0)
+ return;
- if (!refEntity)
- return;
+ if (!refEntity)
+ return;
- setReadOnly(false, true);
+ setReadOnly(false, true);
this->cloneChildren(*refEntity);
- setReadOnly(true, true);
-}
-
-NodeImpl * EntityImpl::getFirstChild()
-{
- cloneEntityRefTree();
- return firstChild;
-};
-
-NodeImpl* EntityImpl::getLastChild()
-{
- cloneEntityRefTree();
- return lastChild();
-}
-
-NodeListImpl* EntityImpl::getChildNodes()
-{
- cloneEntityRefTree();
- return this;
-
-}
-
-bool EntityImpl::hasChildNodes()
-{
- cloneEntityRefTree();
- return firstChild!=null;
-}
-
-NodeImpl* EntityImpl::item(unsigned int index)
-{
- cloneEntityRefTree();
- ChildNode *node = firstChild;
- for(unsigned int i=0; i<index && node!=null; ++i)
- node = node->nextSibling;
- return node;
+ setReadOnly(true, true);
}
XERCES_CPP_NAMESPACE_END
1.6 +3 -14 xml-xerces/c/src/xercesc/dom/deprecated/EntityImpl.hpp
Index: EntityImpl.hpp
===================================================================
RCS file: /home/cvs/xml-xerces/c/src/xercesc/dom/deprecated/EntityImpl.hpp,v
retrieving revision 1.5
retrieving revision 1.6
diff -u -r1.5 -r1.6
--- EntityImpl.hpp 8 Sep 2004 13:55:43 -0000 1.5
+++ EntityImpl.hpp 14 Jan 2005 10:37:30 -0000 1.6
@@ -44,10 +44,9 @@
DOMString systemId;
DOMString notationName;
- EntityReferenceImpl* refEntity;
- void cloneEntityRefTree();
+ void setEntityRef(EntityReferenceImpl*);
- friend class DOMParser;
+ friend class DOMParser;
public:
EntityImpl(DocumentImpl*, const DOMString &eName);
@@ -63,16 +62,6 @@
virtual void setNotationName(const DOMString &arg);
virtual void setPublicId(const DOMString &arg);
virtual void setSystemId(const DOMString &arg);
-
- virtual NodeImpl* getFirstChild();
- virtual NodeImpl* getLastChild();
- virtual NodeListImpl* getChildNodes();
- virtual bool hasChildNodes();
- virtual NodeImpl* item(unsigned int index);
-
- //DOM Level 2 additions. Non standard functions
- virtual void setEntityRef(EntityReferenceImpl*);
- virtual EntityReferenceImpl* getEntityRef() const;
};
XERCES_CPP_NAMESPACE_END
1.6 +2 -4 xml-xerces/c/src/xercesc/dom/deprecated/EntityReferenceImpl.cpp
Index: EntityReferenceImpl.cpp
===================================================================
RCS file: /home/cvs/xml-xerces/c/src/xercesc/dom/deprecated/EntityReferenceImpl.cpp,v
retrieving revision 1.5
retrieving revision 1.6
diff -u -r1.5 -r1.6
--- EntityReferenceImpl.cpp 8 Sep 2004 13:55:43 -0000 1.5
+++ EntityReferenceImpl.cpp 14 Jan 2005 10:37:42 -0000 1.6
@@ -96,9 +96,7 @@
if (ownerDoc->getDoctype()->getEntities()) {
EntityImpl* entity = (EntityImpl*)ownerDoc->getDoctype()->getEntities()->getNamedItem(entityName);
if (entity) {
- EntityReferenceImpl* refEntity = entity->getEntityRef();
- if (refEntity)
- cloneChildren(*refEntity);
+ cloneChildren(*entity);
}
}
}
---------------------------------------------------------------------
To unsubscribe, e-mail: xerces-cvs-unsubscribe@xml.apache.org
For additional commands, e-mail: xerces-cvs-help@xml.apache.org