peiyongz 2004/02/03 08:43:14 Modified: c/src/xercesc/internal DGXMLScanner.cpp IGXMLScanner.cpp Log: Fix to Bug#26315 Revision Changes Path 1.41 +18 -3 xml-xerces/c/src/xercesc/internal/DGXMLScanner.cpp Index: DGXMLScanner.cpp =================================================================== RCS file: /home/cvs/xml-xerces/c/src/xercesc/internal/DGXMLScanner.cpp,v retrieving revision 1.40 retrieving revision 1.41 diff -u -r1.40 -r1.41 --- DGXMLScanner.cpp 29 Jan 2004 11:46:30 -0000 1.40 +++ DGXMLScanner.cpp 3 Feb 2004 16:43:14 -0000 1.41 @@ -825,11 +825,26 @@ // this will break getRootElemId on DTDGrammar when // cached grammars are in use, but // why would one use this anyway??? - ((DTDGrammar*)fGrammar)->setRootElemId(fGrammar->putElemDecl(rootDecl)); + try { + ((DTDGrammar*)fGrammar)->setRootElemId(fGrammar->putElemDecl(rootDecl)); + } + catch(const XMLException&) + { + delete rootDecl; + throw; + } } else { // put this in the undeclared pool so it gets deleted... - rootDecl->setId(fDTDElemNonDeclPool->put((DTDElementDecl*)rootDecl)); + XMLElementDecl* elemDecl = fDTDElemNonDeclPool->getByKey(bbRootName.getRawBuffer()); + if (elemDecl) + { + rootDecl->setId(elemDecl->getId()); + } + else + { + rootDecl->setId(fDTDElemNonDeclPool->put((DTDElementDecl*)rootDecl)); + } } // Skip any spaces after the name 1.59 +10 -2 xml-xerces/c/src/xercesc/internal/IGXMLScanner.cpp Index: IGXMLScanner.cpp =================================================================== RCS file: /home/cvs/xml-xerces/c/src/xercesc/internal/IGXMLScanner.cpp,v retrieving revision 1.58 retrieving revision 1.59 diff -u -r1.58 -r1.59 --- IGXMLScanner.cpp 29 Jan 2004 11:46:30 -0000 1.58 +++ IGXMLScanner.cpp 3 Feb 2004 16:43:14 -0000 1.59 @@ -1386,7 +1386,15 @@ } else { // attach this to the undeclared element pool so that it gets deleted - rootDecl->setId(fDTDElemNonDeclPool->put((DTDElementDecl*)rootDecl)); + XMLElementDecl* elemDecl = fDTDElemNonDeclPool->getByKey(bbRootName.getRawBuffer()); + if (elemDecl) + { + rootDecl->setId(elemDecl->getId()); + } + else + { + rootDecl->setId(fDTDElemNonDeclPool->put((DTDElementDecl*)rootDecl)); + } } // Skip any spaces after the name
--------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]