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