You are viewing a plain text version of this content. The canonical link for it is here.
Posted to c-dev@xerces.apache.org by bu...@apache.org on 2001/09/05 00:18:33 UTC
[DO NOT REPLY: Bug 3422] New:
Memory leaks from DTDValidator
PLEASE DO NOT REPLY TO THIS MESSAGE. TO FURTHER COMMENT
ON THE STATUS OF THIS BUG PLEASE FOLLOW THE LINK BELOW
AND USE THE ON-LINE APPLICATION. REPLYING TO THIS MESSAGE
DOES NOT UPDATE THE DATABASE, AND SO YOUR COMMENT WILL
BE LOST SOMEWHERE.
http://nagoya.apache.org/bugzilla/show_bug.cgi?id=3422
*** shadow/3422 Tue Sep 4 15:18:33 2001
--- shadow/3422.tmp.29534 Tue Sep 4 15:18:33 2001
***************
*** 0 ****
--- 1,128 ----
+ +============================================================================+
+ | Memory leaks from DTDValidator |
+ +----------------------------------------------------------------------------+
+ | Bug #: 3422 Product: Xerces-C++ |
+ | Status: NEW Version: 1.5.1 |
+ | Resolution: Platform: PC |
+ | Severity: Normal OS/Version: Windows NT/2K |
+ | Priority: Other Component: Validating Parser (DTD) |
+ +----------------------------------------------------------------------------+
+ | Assigned To: xerces-c-dev@xml.apache.org |
+ | Reported By: jerry.carter@speechworks.com |
+ | CC list: Cc: |
+ +----------------------------------------------------------------------------+
+ | URL: |
+ +============================================================================+
+ | DESCRIPTION |
+ Running the debug build of SAXPrint.exe on Windows NT 4.0 with the command line
+ 'saxprint -v=always personal.xml' appears to expose a memory leak in the DTD
+ validation layer. This was detected using Purify 6.0:
+
+ [I] Searching for all memory leaks...
+ [W] MLK: Memory leak of 18 bytes from 1 block allocated in QName::setPrefix(WORD
+ const*)
+ [W] MLK: Memory leak of 18 bytes from 1 block allocated in
+ QName::setLocalPart(WORD const*)
+ [W] MLK: Memory leak of 24 bytes from 1 block allocated in
+ DFAContentModel::buildSyntaxTree(ContentSpecNode * const)
+ [W] MLK: Memory leak of 24 bytes from 1 block allocated in
+ DFAContentModel::buildSyntaxTree(ContentSpecNode * const)
+ [W] MLK: Memory leak of 24 bytes from 1 block allocated in
+ DFAContentModel::buildSyntaxTree(ContentSpecNode * const)
+ [W] MLK: Memory leak of 28 bytes from 1 block allocated in
+ DFAContentModel::buildSyntaxTree(ContentSpecNode * const)
+ [W] MLK: Memory leak of 28 bytes from 1 block allocated in
+ DFAContentModel::buildSyntaxTree(ContentSpecNode * const)
+ [W] MLK: Memory leak of 28 bytes from 1 block allocated in
+ DFAContentModel::buildSyntaxTree(ContentSpecNode * const)
+ [W] MLK: Memory leak of 28 bytes from 1 block allocated in
+ DFAContentModel::buildDFA(ContentSpecNode * const)
+ [W] MLK: Memory leak of 20 bytes from 1 block allocated in
+ CMNode::getFirstPos(void)const
+ [W] MLK: Memory leak of 20 bytes from 1 block allocated in
+ CMNode::getLastPos(void)const
+ [W] MLK: Memory leak of 20 bytes from 1 block allocated in
+ CMNode::getFirstPos(void)const
+ [W] MLK: Memory leak of 20 bytes from 1 block allocated in
+ CMNode::getLastPos(void)const
+ [W] MLK: Memory leak of 20 bytes from 1 block allocated in
+ CMNode::getFirstPos(void)const
+ [W] MLK: Memory leak of 20 bytes from 1 block allocated in
+ CMNode::getFirstPos(void)const
+ [W] MLK: Memory leak of 20 bytes from 1 block allocated in
+ CMNode::getFirstPos(void)const
+ [W] MLK: Memory leak of 20 bytes from 1 block allocated in
+ CMNode::getLastPos(void)const
+ [W] MLK: Memory leak of 20 bytes from 1 block allocated in
+ CMNode::getLastPos(void)const
+ [W] MLK: Memory leak of 20 bytes from 1 block allocated in
+ CMNode::getLastPos(void)const
+ [W] MLK: Memory leak of 20 bytes from 1 block allocated in
+ CMNode::getLastPos(void)const
+ [W] MLK: Memory leak of 20 bytes from 1 block allocated in
+ CMNode::getFirstPos(void)const
+ [W] MLK: Memory leak of 20 bytes from 1 block allocated in
+ CMNode::getFirstPos(void)const
+ [W] MLK: Memory leak of 28 bytes from 1 block allocated in
+ DFAContentModel::buildDFA(ContentSpecNode * const)
+
+ These are likely to be related. Focusing on the last one, the call trace is
+
+ new(UINT) [crtdbg.h:552]
+ DFAContentModel::buildDFA(ContentSpecNode * const) [DFAContentModel.cpp:460]
+ DFAContentModel::DFAContentModel(bool,XMLElementDecl * const)
+ [DFAContentModel.cpp:171]
+ DTDElementDecl::createChildModel(void) [DTDElementDecl.cpp:406]
+ DTDElementDecl::makeContentModel(void) [DTDElementDecl.cpp:317]
+ XMLElementDecl::getContentModel(void) [XMLElementDecl.hpp:639]
+ DTDValidator::checkContent(XMLElementDecl * const,QName * * const,UINT)
+ [DTDValidator.cpp:125]
+ XMLScanner::scanEndTag(bool&) [XMLScanner.cpp:1673]
+ XMLScanner::scanContent(bool) [XMLScanner.cpp:1502]
+ XMLScanner::scanDocument(InputSource const&,bool) [XMLScanner.cpp:374]
+ XMLScanner::scanDocument(WORD const* const,bool) [XMLScanner.cpp:320]
+ XMLScanner::scanDocument(char const* const,bool) [XMLScanner.cpp:329]
+ SAXParser::parse(char const* const,bool) [SAXParser.cpp:417]
+ main [saxprint.cpp:309]
+ mainCRTStartup [crtexe.c:338]
+
+ and the relevent lines are
+
+ DFAContentModel::buildDFA(ContentSpecNode * const) [DFAContentModel.cpp:460]
+ // DFA state position and count the number of such leafs, which is left
+ // in the fLeafCount member.
+ //
+ => QName* qname = new QName(XMLUni::fgZeroLenString,
+ XMLUni::fgZeroLenString, XMLContentModel::gEOCFakeId);
+ CMLeaf* nodeEOC = new CMLeaf(qname);
+ CMNode* nodeOrgContent = buildSyntaxTree(curNode);
+ fHeadNode = new CMBinaryOp
+
+ suggesting that the DFAContentModel is not freeing all the objects it creates.
+
+ /////////////////////////////
+ In file 'src/validators/common/DFAContentModel.cpp'
+ at function 'void DFAContentModel::buildDFA(ContentSpecNode* const curNode)'
+ at line 460:
+
+ QName* qname = new QName(XMLUni::fgZeroLenString, XMLUni::fgZeroLenString,
+ XMLContentModel::gEOCFakeId);
+ CMLeaf* nodeEOC = new CMLeaf(qname);
+ delete qname; // The addition of this line remove the QName leaks.
+
+ The remaining problems appear related to a failure to delete the memory
+ associated with:
+
+ fHeadNode = new CMBinaryOp
+ (
+ ContentSpecNode::Sequence
+ , nodeOrgContent
+ , nodeEOC
+ );
+
+ Curiously, there is an explicit comment about this
+
+ // the CMBinary will be released by fLeafList[]
+ //delete fHeadNode;
+
+ which suggests that someone missed a case.
---------------------------------------------------------------------
To unsubscribe, e-mail: xerces-c-dev-unsubscribe@xml.apache.org
For additional commands, e-mail: xerces-c-dev-help@xml.apache.org