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]