You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@xerces.apache.org by ca...@apache.org on 2006/07/06 21:31:02 UTC
svn commit: r419674 - in /xerces/c/branches/xerces-2.7/src/xercesc:
framework/ framework/psvi/ internal/ util/ util/regx/ validators/common/
validators/schema/
Author: cargilld
Date: Thu Jul 6 12:31:01 2006
New Revision: 419674
URL: http://svn.apache.org/viewvc?rev=419674&view=rev
Log:
Fix crashes that can occur when a non-default memory manager tries to clean up after running out of memory
Modified:
xerces/c/branches/xerces-2.7/src/xercesc/framework/XMLAttr.cpp
xerces/c/branches/xerces-2.7/src/xercesc/framework/psvi/PSVIAttributeList.cpp
xerces/c/branches/xerces-2.7/src/xercesc/internal/XMLGrammarPoolImpl.cpp
xerces/c/branches/xerces-2.7/src/xercesc/internal/XMLReader.cpp
xerces/c/branches/xerces-2.7/src/xercesc/internal/XMLScanner.cpp
xerces/c/branches/xerces-2.7/src/xercesc/util/KVStringPair.hpp
xerces/c/branches/xerces-2.7/src/xercesc/util/NameIdPool.c
xerces/c/branches/xerces-2.7/src/xercesc/util/QName.cpp
xerces/c/branches/xerces-2.7/src/xercesc/util/RefHash2KeysTableOf.c
xerces/c/branches/xerces-2.7/src/xercesc/util/RefHash3KeysIdPool.c
xerces/c/branches/xerces-2.7/src/xercesc/util/ValueHashTableOf.c
xerces/c/branches/xerces-2.7/src/xercesc/util/regx/StringToken.hpp
xerces/c/branches/xerces-2.7/src/xercesc/validators/common/GrammarResolver.cpp
xerces/c/branches/xerces-2.7/src/xercesc/validators/schema/SchemaInfo.cpp
xerces/c/branches/xerces-2.7/src/xercesc/validators/schema/TraverseSchema.cpp
xerces/c/branches/xerces-2.7/src/xercesc/validators/schema/XMLSchemaDescriptionImpl.cpp
Modified: xerces/c/branches/xerces-2.7/src/xercesc/framework/XMLAttr.cpp
URL: http://svn.apache.org/viewvc/xerces/c/branches/xerces-2.7/src/xercesc/framework/XMLAttr.cpp?rev=419674&r1=419673&r2=419674&view=diff
==============================================================================
--- xerces/c/branches/xerces-2.7/src/xercesc/framework/XMLAttr.cpp (original)
+++ xerces/c/branches/xerces-2.7/src/xercesc/framework/XMLAttr.cpp Thu Jul 6 12:31:01 2006
@@ -157,6 +157,7 @@
if (!fValueBufSz || (newLen > fValueBufSz))
{
fMemoryManager->deallocate(fValue); //delete [] fValue;
+ fValue = 0;
fValueBufSz = newLen + 8;
fValue = (XMLCh*) fMemoryManager->allocate((fValueBufSz+1) * sizeof(XMLCh)); //new XMLCh[fValueBufSz + 1];
}
Modified: xerces/c/branches/xerces-2.7/src/xercesc/framework/psvi/PSVIAttributeList.cpp
URL: http://svn.apache.org/viewvc/xerces/c/branches/xerces-2.7/src/xercesc/framework/psvi/PSVIAttributeList.cpp?rev=419674&r1=419673&r2=419674&view=diff
==============================================================================
--- xerces/c/branches/xerces-2.7/src/xercesc/framework/psvi/PSVIAttributeList.cpp (original)
+++ xerces/c/branches/xerces-2.7/src/xercesc/framework/psvi/PSVIAttributeList.cpp Thu Jul 6 12:31:01 2006
@@ -26,6 +26,9 @@
PSVIAttributeList::PSVIAttributeList( MemoryManager* const manager ):
fMemoryManager(manager)
+ , fAttrList(0)
+ , fAttrNameList(0)
+ , fAttrNSList(0)
, fAttrPos(0)
{
fAttrList= new (fMemoryManager) RefVectorOf<PSVIAttribute> (10, true, fMemoryManager);
Modified: xerces/c/branches/xerces-2.7/src/xercesc/internal/XMLGrammarPoolImpl.cpp
URL: http://svn.apache.org/viewvc/xerces/c/branches/xerces-2.7/src/xercesc/internal/XMLGrammarPoolImpl.cpp?rev=419674&r1=419673&r2=419674&view=diff
==============================================================================
--- xerces/c/branches/xerces-2.7/src/xercesc/internal/XMLGrammarPoolImpl.cpp (original)
+++ xerces/c/branches/xerces-2.7/src/xercesc/internal/XMLGrammarPoolImpl.cpp Thu Jul 6 12:31:01 2006
@@ -38,6 +38,7 @@
void XMLGrammarPoolImpl::createXSModel()
{
delete fXSModel;
+ fXSModel = 0;
fXSModel = new (getMemoryManager()) XSModel(this, getMemoryManager());
fXSModelIsValid = true;
}
Modified: xerces/c/branches/xerces-2.7/src/xercesc/internal/XMLReader.cpp
URL: http://svn.apache.org/viewvc/xerces/c/branches/xerces-2.7/src/xercesc/internal/XMLReader.cpp?rev=419674&r1=419673&r2=419674&view=diff
==============================================================================
--- xerces/c/branches/xerces-2.7/src/xercesc/internal/XMLReader.cpp (original)
+++ xerces/c/branches/xerces-2.7/src/xercesc/internal/XMLReader.cpp Thu Jul 6 12:31:01 2006
@@ -1260,10 +1260,12 @@
if (fEncoding == XMLRecognizer::UTF_16L) {
fMemoryManager->deallocate(fEncodingStr);
+ fEncodingStr = 0;
fEncodingStr = XMLString::replicate(XMLUni::fgUTF16LEncodingString, fMemoryManager);
}
else {
fMemoryManager->deallocate(fEncodingStr);
+ fEncodingStr = 0;
fEncodingStr = XMLString::replicate(XMLUni::fgUTF16BEncodingString, fMemoryManager);
}
}
@@ -1285,11 +1287,13 @@
if (fEncoding == XMLRecognizer::UCS_4L) {
fMemoryManager->deallocate(fEncodingStr);
+ fEncodingStr = 0;
fEncodingStr = XMLString::replicate(XMLUni::fgUCS4LEncodingString, fMemoryManager);
}
else {
fMemoryManager->deallocate(fEncodingStr);
+ fEncodingStr = 0;
fEncodingStr = XMLString::replicate(XMLUni::fgUCS4BEncodingString, fMemoryManager);
}
}
Modified: xerces/c/branches/xerces-2.7/src/xercesc/internal/XMLScanner.cpp
URL: http://svn.apache.org/viewvc/xerces/c/branches/xerces-2.7/src/xercesc/internal/XMLScanner.cpp?rev=419674&r1=419673&r2=419674&view=diff
==============================================================================
--- xerces/c/branches/xerces-2.7/src/xercesc/internal/XMLScanner.cpp (original)
+++ xerces/c/branches/xerces-2.7/src/xercesc/internal/XMLScanner.cpp Thu Jul 6 12:31:01 2006
@@ -772,9 +772,9 @@
// create initial, 64-element, fUIntPool
fUIntPool = (unsigned int **)fMemoryManager->allocate(sizeof(unsigned int *) *fUIntPoolRowTotal);
+ memset(fUIntPool, 0, sizeof(unsigned int *) * fUIntPoolRowTotal);
fUIntPool[0] = (unsigned int *)fMemoryManager->allocate(sizeof(unsigned int) << 6);
- memset(fUIntPool[0], 0, sizeof(unsigned int) << 6);
- fUIntPool[1] = 0;
+ memset(fUIntPool[0], 0, sizeof(unsigned int) << 6);
// Register self as handler for XMLBufferFull events on the CDATA buffer
fCDataBuf.setFullHandler(this, fBufferSize);
@@ -794,11 +794,14 @@
fMemoryManager->deallocate(fExternalSchemaLocation);//delete [] fExternalSchemaLocation;
fMemoryManager->deallocate(fExternalNoNamespaceSchemaLocation);//delete [] fExternalNoNamespaceSchemaLocation;
// delete fUIntPool
- for (unsigned int i=0; i<=fUIntPoolRow; i++)
- {
- fMemoryManager->deallocate(fUIntPool[i]);
+ if (fUIntPool)
+ {
+ for (unsigned int i=0; i<=fUIntPoolRow; i++)
+ {
+ fMemoryManager->deallocate(fUIntPool[i]);
+ }
+ fMemoryManager->deallocate(fUIntPool);
}
- fMemoryManager->deallocate(fUIntPool);
}
void XMLScanner::initValidator(XMLValidator* theValidator) {
Modified: xerces/c/branches/xerces-2.7/src/xercesc/util/KVStringPair.hpp
URL: http://svn.apache.org/viewvc/xerces/c/branches/xerces-2.7/src/xercesc/util/KVStringPair.hpp?rev=419674&r1=419673&r2=419674&view=diff
==============================================================================
--- xerces/c/branches/xerces-2.7/src/xercesc/util/KVStringPair.hpp (original)
+++ xerces/c/branches/xerces-2.7/src/xercesc/util/KVStringPair.hpp Thu Jul 6 12:31:01 2006
@@ -178,6 +178,7 @@
if (newKeyLength >= fKeyAllocSize)
{
fMemoryManager->deallocate(fKey); //delete [] fKey;
+ fKey = 0;
fKeyAllocSize = newKeyLength + 1;
fKey = (XMLCh*) fMemoryManager->allocate(fKeyAllocSize * sizeof(XMLCh)); //new XMLCh[fKeyAllocSize];
}
@@ -191,6 +192,7 @@
if (newValueLength >= fValueAllocSize)
{
fMemoryManager->deallocate(fValue); //delete [] fValue;
+ fValue = 0;
fValueAllocSize = newValueLength + 1;
fValue = (XMLCh*) fMemoryManager->allocate(fValueAllocSize * sizeof(XMLCh)); //new XMLCh[fValueAllocSize];
}
Modified: xerces/c/branches/xerces-2.7/src/xercesc/util/NameIdPool.c
URL: http://svn.apache.org/viewvc/xerces/c/branches/xerces-2.7/src/xercesc/util/NameIdPool.c?rev=419674&r1=419673&r2=419674&view=diff
==============================================================================
--- xerces/c/branches/xerces-2.7/src/xercesc/util/NameIdPool.c (original)
+++ xerces/c/branches/xerces-2.7/src/xercesc/util/NameIdPool.c Thu Jul 6 12:31:01 2006
@@ -73,8 +73,7 @@
(
fHashModulus * sizeof(NameIdPoolBucketElem<TElem>*)
); //new NameIdPoolBucketElem<TElem>*[fHashModulus];
- for (unsigned int index = 0; index < fHashModulus; index++)
- fBucketList[index] = 0;
+ memset(fBucketList, 0, sizeof(fBucketList[0]) * fHashModulus);
//
// Allocate the initial id pointers array. We don't have to zero them
Modified: xerces/c/branches/xerces-2.7/src/xercesc/util/QName.cpp
URL: http://svn.apache.org/viewvc/xerces/c/branches/xerces-2.7/src/xercesc/util/QName.cpp?rev=419674&r1=419673&r2=419674&view=diff
==============================================================================
--- xerces/c/branches/xerces-2.7/src/xercesc/util/QName.cpp (original)
+++ xerces/c/branches/xerces-2.7/src/xercesc/util/QName.cpp Thu Jul 6 12:31:01 2006
@@ -180,6 +180,7 @@
{
fMemoryManager->deallocate(fRawName); //delete [] fRawName;
+ ((QName*)this)->fRawName = 0;
// We have to cast off the const'ness to do this
((QName*)this)->fRawNameBufSz = neededLen;
((QName*)this)->fRawName = (XMLCh*) fMemoryManager->allocate
@@ -234,7 +235,8 @@
if (!fRawName || (neededLen > fRawNameBufSz))
{
fMemoryManager->deallocate(fRawName); //delete [] fRawName;
-
+
+ fRawName = 0;
// We have to cast off the const'ness to do this
((QName*)this)->fRawNameBufSz = neededLen;
((QName*)this)->fRawName = (XMLCh*) fMemoryManager->allocate
@@ -292,6 +294,7 @@
if (!fRawNameBufSz || (newLen > fRawNameBufSz))
{
fMemoryManager->deallocate(fRawName); //delete [] fRawName;
+ fRawName = 0;
fRawNameBufSz = newLen + 8;
fRawName = (XMLCh*) fMemoryManager->allocate
(
@@ -325,6 +328,7 @@
if (!fPrefixBufSz || (newLen > fPrefixBufSz))
{
fMemoryManager->deallocate(fPrefix); //delete [] fPrefix;
+ fPrefix = 0;
fPrefixBufSz = newLen + 8;
fPrefix = (XMLCh*) fMemoryManager->allocate
(
@@ -339,6 +343,7 @@
if (!fPrefixBufSz || (newLen > fPrefixBufSz))
{
fMemoryManager->deallocate(fPrefix); //delete [] fPrefix;
+ fPrefix = 0;
fPrefixBufSz = newLen + 8;
fPrefix = (XMLCh*) fMemoryManager->allocate
(
@@ -357,6 +362,7 @@
if (!fLocalPartBufSz || (newLen > fLocalPartBufSz))
{
fMemoryManager->deallocate(fLocalPart); //delete [] fLocalPart;
+ fLocalPart = 0;
fLocalPartBufSz = newLen + 8;
fLocalPart = (XMLCh*) fMemoryManager->allocate
(
@@ -371,6 +377,7 @@
if (!fLocalPartBufSz || (newLen > fLocalPartBufSz))
{
fMemoryManager->deallocate(fLocalPart); //delete [] fLocalPart;
+ fLocalPart = 0;
fLocalPartBufSz = newLen + 8;
fLocalPart = (XMLCh*) fMemoryManager->allocate
(
Modified: xerces/c/branches/xerces-2.7/src/xercesc/util/RefHash2KeysTableOf.c
URL: http://svn.apache.org/viewvc/xerces/c/branches/xerces-2.7/src/xercesc/util/RefHash2KeysTableOf.c?rev=419674&r1=419673&r2=419674&view=diff
==============================================================================
--- xerces/c/branches/xerces-2.7/src/xercesc/util/RefHash2KeysTableOf.c (original)
+++ xerces/c/branches/xerces-2.7/src/xercesc/util/RefHash2KeysTableOf.c Thu Jul 6 12:31:01 2006
@@ -97,8 +97,7 @@
(
fHashModulus * sizeof(RefHash2KeysTableBucketElem<TVal>*)
); //new RefHash2KeysTableBucketElem<TVal>*[fHashModulus];
- for (unsigned int index = 0; index < fHashModulus; index++)
- fBucketList[index] = 0;
+ memset(fBucketList, 0, sizeof(fBucketList[0]) * fHashModulus);
}
template <class TVal> RefHash2KeysTableOf<TVal>::~RefHash2KeysTableOf()
Modified: xerces/c/branches/xerces-2.7/src/xercesc/util/RefHash3KeysIdPool.c
URL: http://svn.apache.org/viewvc/xerces/c/branches/xerces-2.7/src/xercesc/util/RefHash3KeysIdPool.c?rev=419674&r1=419673&r2=419674&view=diff
==============================================================================
--- xerces/c/branches/xerces-2.7/src/xercesc/util/RefHash3KeysIdPool.c (original)
+++ xerces/c/branches/xerces-2.7/src/xercesc/util/RefHash3KeysIdPool.c Thu Jul 6 12:31:01 2006
@@ -142,8 +142,7 @@
(
fHashModulus * sizeof(RefHash3KeysTableBucketElem<TVal>*)
); //new RefHash3KeysTableBucketElem<TVal>*[fHashModulus];
- for (unsigned int index = 0; index < fHashModulus; index++)
- fBucketList[index] = 0;
+ memset(fBucketList, 0, sizeof(fBucketList[0]) * fHashModulus);
}
template <class TVal> RefHash3KeysIdPool<TVal>::~RefHash3KeysIdPool()
Modified: xerces/c/branches/xerces-2.7/src/xercesc/util/ValueHashTableOf.c
URL: http://svn.apache.org/viewvc/xerces/c/branches/xerces-2.7/src/xercesc/util/ValueHashTableOf.c?rev=419674&r1=419673&r2=419674&view=diff
==============================================================================
--- xerces/c/branches/xerces-2.7/src/xercesc/util/ValueHashTableOf.c (original)
+++ xerces/c/branches/xerces-2.7/src/xercesc/util/ValueHashTableOf.c Thu Jul 6 12:31:01 2006
@@ -73,8 +73,7 @@
(
fHashModulus * sizeof(ValueHashTableBucketElem<TVal>*)
); //new ValueHashTableBucketElem<TVal>*[fHashModulus];
- for (unsigned int index = 0; index < fHashModulus; index++)
- fBucketList[index] = 0;
+ memset(fBucketList, 0, sizeof(fBucketList[0]) * fHashModulus);
}
template <class TVal> ValueHashTableOf<TVal>::~ValueHashTableOf()
Modified: xerces/c/branches/xerces-2.7/src/xercesc/util/regx/StringToken.hpp
URL: http://svn.apache.org/viewvc/xerces/c/branches/xerces-2.7/src/xercesc/util/regx/StringToken.hpp?rev=419674&r1=419673&r2=419674&view=diff
==============================================================================
--- xerces/c/branches/xerces-2.7/src/xercesc/util/regx/StringToken.hpp (original)
+++ xerces/c/branches/xerces-2.7/src/xercesc/util/regx/StringToken.hpp Thu Jul 6 12:31:01 2006
@@ -86,6 +86,7 @@
inline void StringToken::setString(const XMLCh* const literal) {
fMemoryManager->deallocate(fString);//delete [] fString;
+ fString = 0;
fString = XMLString::replicate(literal, fMemoryManager);
}
Modified: xerces/c/branches/xerces-2.7/src/xercesc/validators/common/GrammarResolver.cpp
URL: http://svn.apache.org/viewvc/xerces/c/branches/xerces-2.7/src/xercesc/validators/common/GrammarResolver.cpp?rev=419674&r1=419673&r2=419674&view=diff
==============================================================================
--- xerces/c/branches/xerces-2.7/src/xercesc/validators/common/GrammarResolver.cpp (original)
+++ xerces/c/branches/xerces-2.7/src/xercesc/validators/common/GrammarResolver.cpp Thu Jul 6 12:31:01 2006
@@ -43,6 +43,7 @@
,fGrammarPool(gramPool)
,fXSModel(0)
,fGrammarPoolXSModel(0)
+,fGrammarsToAddToXSModel(0)
{
fGrammarBucket = new (manager) RefHashTableOf<Grammar>(29, true, manager);
Modified: xerces/c/branches/xerces-2.7/src/xercesc/validators/schema/SchemaInfo.cpp
URL: http://svn.apache.org/viewvc/xerces/c/branches/xerces-2.7/src/xercesc/validators/schema/SchemaInfo.cpp?rev=419674&r1=419673&r2=419674&view=diff
==============================================================================
--- xerces/c/branches/xerces-2.7/src/xercesc/validators/schema/SchemaInfo.cpp (original)
+++ xerces/c/branches/xerces-2.7/src/xercesc/validators/schema/SchemaInfo.cpp Thu Jul 6 12:31:01 2006
@@ -65,11 +65,16 @@
, fMemoryManager(manager)
{
fImportingInfoList = new (fMemoryManager) RefVectorOf<SchemaInfo>(4, false, fMemoryManager);
- for (unsigned int i = 0; i < C_Count; i++)
- {
- fTopLevelComponents[i] = 0;
- fLastTopLevelComponent[i] = 0;
- }
+
+ memset(
+ fTopLevelComponents,
+ 0,
+ sizeof(fTopLevelComponents[0]) * C_Count);
+ memset(
+ fLastTopLevelComponent,
+ 0,
+ sizeof(fLastTopLevelComponent[0]) * C_Count);
+
fNonXSAttList = new (fMemoryManager) ValueVectorOf<DOMNode*>(2, fMemoryManager);
fValidationContext = new (fMemoryManager) ValidationContextImpl(fMemoryManager);
}
@@ -83,34 +88,18 @@
if (fAdoptInclude)
delete fIncludeInfoList;
- delete fImportingInfoList;
-
- fImportedInfoList = fIncludeInfoList = fImportingInfoList = 0;
-
+ delete fImportingInfoList;
delete fImportedNSList;
- fImportedNSList = 0;
-
delete fFailedRedefineList;
- fFailedRedefineList = 0;
-
delete fRecursingAnonTypes;
- fRecursingAnonTypes = 0;
-
- delete fRecursingTypeNames;
- fRecursingTypeNames = 0;
+ delete fRecursingTypeNames;
for (unsigned int i = 0; i < C_Count; i++) {
-
delete fTopLevelComponents[i];
- fTopLevelComponents[i] = 0;
- fLastTopLevelComponent[i] = 0;
}
- delete fNonXSAttList;
- fNonXSAttList = 0;
-
- delete fValidationContext;
- fValidationContext = 0;
+ delete fNonXSAttList;
+ delete fValidationContext;
}
// ---------------------------------------------------------------------------
Modified: xerces/c/branches/xerces-2.7/src/xercesc/validators/schema/TraverseSchema.cpp
URL: http://svn.apache.org/viewvc/xerces/c/branches/xerces-2.7/src/xercesc/validators/schema/TraverseSchema.cpp?rev=419674&r1=419673&r2=419674&view=diff
==============================================================================
--- xerces/c/branches/xerces-2.7/src/xercesc/validators/schema/TraverseSchema.cpp (original)
+++ xerces/c/branches/xerces-2.7/src/xercesc/validators/schema/TraverseSchema.cpp Thu Jul 6 12:31:01 2006
@@ -14,6 +14,10 @@
* limitations under the License.
*/
+/*
+ * $Id$
+ */
+
// ---------------------------------------------------------------------------
// Includes
// ---------------------------------------------------------------------------
@@ -584,7 +588,7 @@
// ------------------------------------------------------------------
fLocator->setValues(fSchemaInfo->getCurrentSchemaURL(), 0,
((XSDElementNSImpl*) elem)->getLineNo(),
- ((XSDElementNSImpl*) elem)->getColumnNo());
+ ((XSDElementNSImpl*) elem)->getColumnNo());
InputSource* srcToFill = resolveSchemaLocation(schemaLocation,
XMLResourceIdentifier::SchemaInclude);
Janitor<InputSource> janSrc(srcToFill);
@@ -778,9 +782,9 @@
// ------------------------------------------------------------------
// Resolve schema location
// ------------------------------------------------------------------
- fLocator->setValues(fSchemaInfo->getCurrentSchemaURL(), 0,
+ fLocator->setValues(fSchemaInfo->getCurrentSchemaURL(), 0,
((XSDElementNSImpl*) elem)->getLineNo(),
- ((XSDElementNSImpl*) elem)->getColumnNo());
+ ((XSDElementNSImpl*) elem)->getColumnNo());
InputSource* srcToFill = resolveSchemaLocation(schemaLocation,
XMLResourceIdentifier::SchemaImport, nameSpace);
@@ -1560,10 +1564,11 @@
Janitor<ContentSpecNode> specNode(0);
XercesGroupInfo* saveGroupInfo = fCurrentGroupInfo;
- Janitor<XercesGroupInfo> newGroupInfo(new (fGrammarPoolMemoryManager) XercesGroupInfo(
+ Janitor<XercesGroupInfo> newGroupInfoJan(new (fGrammarPoolMemoryManager) XercesGroupInfo(
fStringPool->addOrFind(name), fTargetNSURI, fGrammarPoolMemoryManager));
fCurrentGroupStack->addElement(nameIndex);
- fCurrentGroupInfo = newGroupInfo.get();
+ XercesGroupInfo* const newGroupInfo = newGroupInfoJan.get();
+ fCurrentGroupInfo = newGroupInfo;
fCurrentScope = fScopeCount++;
fCurrentGroupInfo->setScope(fCurrentScope);
@@ -1614,19 +1619,20 @@
fCurrentGroupInfo->setContentSpec(specNode.release());
fGroupRegistry->put((void*) fullName, fCurrentGroupInfo);
+ newGroupInfoJan.release();
fCurrentGroupInfo = saveGroupInfo;
fCurrentScope = saveScope;
// Store Annotation
if (!janAnnot.isDataNull()) {
- fSchemaGrammar->putAnnotation(newGroupInfo.get(), janAnnot.release());
+ fSchemaGrammar->putAnnotation(newGroupInfo, janAnnot.release());
}
if (fFullConstraintChecking) {
XSDLocator* aLocator = new (fGrammarPoolMemoryManager) XSDLocator();
- newGroupInfo.get()->setLocator(aLocator);
+ newGroupInfo->setLocator(aLocator);
aLocator->setValues(fStringPool->getValueForId(fStringPool->addOrFind(fSchemaInfo->getCurrentSchemaURL())),
0, ((XSDElementNSImpl*) elem)->getLineNo(),
((XSDElementNSImpl*) elem)->getColumnNo());
@@ -1647,7 +1653,7 @@
XercesGroupInfo* baseGroup = fGroupRegistry->get(fBuffer.getRawBuffer());
if (baseGroup)
{
- newGroupInfo.get()->setBaseGroup(baseGroup);
+ newGroupInfo->setBaseGroup(baseGroup);
}
else
{
@@ -1659,7 +1665,7 @@
if (groupElem != 0) {
baseGroup = traverseGroupDecl(groupElem);
- newGroupInfo.get()->setBaseGroup(baseGroup);
+ newGroupInfo->setBaseGroup(baseGroup);
fSchemaInfo = saveInfo;
}
else
@@ -1672,7 +1678,7 @@
}
}
- return newGroupInfo.release();
+ return newGroupInfo;
}
@@ -1787,10 +1793,10 @@
// Pop declaration
fDeclStack->removeElementAt(fDeclStack->size() - 1);
-
- // Restore old attGroupInfo
+
+ fAttGroupRegistry->put((void*) fStringPool->getValueForId(fStringPool->addOrFind(name)), janAttGroupInfo.get());
+ // Restore old attGroupInfo
attGroupInfo = janAttGroupInfo.release();
- fAttGroupRegistry->put((void*) fStringPool->getValueForId(fStringPool->addOrFind(name)), attGroupInfo);
fCurrentAttGroupInfo = saveAttGroupInfo;
// Check Attribute Derivation Restriction OK
@@ -1981,7 +1987,7 @@
, fSchemaGrammar->getValidationContext()
, fMemoryManager);
}
- catch(const XMLException& excep) {
+ catch(const XMLException& excep) {
reportSchemaError(elem, excep);
}
uriIndex = fURIStringPool->addOrFind(tokenElem);
@@ -2022,7 +2028,8 @@
, fGrammarPoolMemoryManager
);
secondNode.release();
- secondNode.reset(newNode);
+ secondNode.reset(newNode);
+ firstNode.release();
}
}
firstNode.release();
@@ -6024,7 +6031,8 @@
const bool isMixed,
const bool isBaseAnyType) {
- Janitor<ContentSpecNode> specNode(0);
+ Janitor<ContentSpecNode> specNodeJan(0);
+ ContentSpecNode* specNode = specNodeJan.get();
const DOMElement* attrNode = 0;
int typeDerivedBy = typeInfo->getDerivedBy();
ComplexTypeInfo* baseTypeInfo = typeInfo->getBaseComplexTypeInfo();
@@ -6071,14 +6079,14 @@
if (grpInfo) {
- specNode.reset(grpInfo->getContentSpec());
+ ContentSpecNode* const groupSpecNode = grpInfo->getContentSpec();
- if (specNode.get()) {
+ if (groupSpecNode) {
- int contentContext = specNode.get()->hasAllContent() ? Group_Ref_With_All : Not_All_Context;
- ContentSpecNode* tempSpecNode = specNode.release();
- specNode.reset(new (fGrammarPoolMemoryManager) ContentSpecNode(*tempSpecNode));
- checkMinMax(specNode.get(), childElem, contentContext);
+ int contentContext = groupSpecNode->hasAllContent() ? Group_Ref_With_All : Not_All_Context;
+ specNodeJan.reset(new (fGrammarPoolMemoryManager) ContentSpecNode(*groupSpecNode));
+ specNode = specNodeJan.get();
+ checkMinMax(specNode, childElem, contentContext);
}
}
@@ -6087,20 +6095,23 @@
}
else if (XMLString::equals(childName, SchemaSymbols::fgELT_SEQUENCE)) {
- specNode.reset(traverseChoiceSequence(childElem, ContentSpecNode::Sequence));
- checkMinMax(specNode.get(), childElem);
+ specNodeJan.reset(traverseChoiceSequence(childElem, ContentSpecNode::Sequence));
+ specNode = specNodeJan.get();
+ checkMinMax(specNode, childElem);
attrNode = XUtil::getNextSiblingElement(childElem);
}
else if (XMLString::equals(childName, SchemaSymbols::fgELT_CHOICE)) {
- specNode.reset(traverseChoiceSequence(childElem, ContentSpecNode::Choice));
- checkMinMax(specNode.get(), childElem);
+ specNodeJan.reset(traverseChoiceSequence(childElem, ContentSpecNode::Choice));
+ specNode = specNodeJan.get();
+ checkMinMax(specNode, childElem);
attrNode = XUtil::getNextSiblingElement(childElem);
}
else if (XMLString::equals(childName, SchemaSymbols::fgELT_ALL)) {
- specNode.reset(traverseAll(childElem));
- checkMinMax(specNode.get(), childElem, All_Group);
+ specNodeJan.reset(traverseAll(childElem));
+ specNode = specNodeJan.get();
+ checkMinMax(specNode, childElem, All_Group);
attrNode = XUtil::getNextSiblingElement(childElem);
}
else if (isAttrOrAttrGroup(childElem)) {
@@ -6113,8 +6124,9 @@
}
}
- typeInfo->setContentSpec(specNode.get());
+ typeInfo->setContentSpec(specNode);
typeInfo->setAdoptContentSpec(true);
+ specNodeJan.release();
// -----------------------------------------------------------------------
// Merge in information from base, if it exists
@@ -6141,17 +6153,19 @@
// Compose the final content model by concatenating the base and
// the current in sequence
- if (!specNode.get()) {
+ if (!specNode) {
if (baseSpecNode) {
- specNode.reset(new (fGrammarPoolMemoryManager) ContentSpecNode(*baseSpecNode));
- typeInfo->setContentSpec(specNode.get());
+ specNodeJan.reset(new (fGrammarPoolMemoryManager) ContentSpecNode(*baseSpecNode));
+ specNode = specNodeJan.get();
+ typeInfo->setContentSpec(specNode);
typeInfo->setAdoptContentSpec(true);
+ specNodeJan.release();
}
}
else if (baseSpecNode) {
- if (specNode.get()->hasAllContent() || baseSpecNode->hasAllContent()) {
+ if (specNode->hasAllContent() || baseSpecNode->hasAllContent()) {
reportSchemaError(ctElem, XMLUni::fgXMLErrDomain, XMLErrs::NotAllContent);
throw TraverseSchema::InvalidComplexTypeInfo; // REVISIT - should we continue
@@ -6172,7 +6186,7 @@
(
ContentSpecNode::ModelGroupSequence
, new (fGrammarPoolMemoryManager) ContentSpecNode(*baseSpecNode)
- , specNode.get()
+ , specNode
, true
, true
, fGrammarPoolMemoryManager
@@ -6207,7 +6221,7 @@
anySpecNode->setMinOccurs(0);
anySpecNode->setMaxOccurs(SchemaSymbols::XSD_UNBOUNDED);
- if (!specNode.get()) {
+ if (!specNode) {
typeInfo->setContentSpec(anySpecNode);
typeInfo->setDerivedBy(typeDerivedBy);
}
@@ -6220,7 +6234,7 @@
(
ContentSpecNode::ModelGroupSequence
, anySpecNode
- , specNode.get()
+ , specNode
, true
, true
, fGrammarPoolMemoryManager
@@ -6239,7 +6253,7 @@
}
else if (isMixed) {
- if (specNode.get() != 0) {
+ if (specNode != 0) {
typeInfo->setContentType(SchemaElementDecl::Mixed_Complex);
}
else {
@@ -6285,8 +6299,7 @@
}
else if (baseTypeInfo != 0 || isBaseAnyType) {
processAttributes(ctElem, 0, typeInfo, isBaseAnyType);
- }
- specNode.release();
+ }
}
@@ -7936,7 +7949,7 @@
// ------------------------------------------------------------------
fLocator->setValues(fSchemaInfo->getCurrentSchemaURL(), 0,
((XSDElementNSImpl*) redefineElem)->getLineNo(),
- ((XSDElementNSImpl*) redefineElem)->getColumnNo());
+ ((XSDElementNSImpl*) redefineElem)->getColumnNo());
InputSource* srcToFill = resolveSchemaLocation(schemaLocation,
XMLResourceIdentifier::SchemaRedefine);
Janitor<InputSource> janSrc(srcToFill);
@@ -8029,9 +8042,9 @@
traverseSchemaHeader(root);
fSchemaInfoList->put((void*) fSchemaInfo->getCurrentSchemaURL(), fSchemaInfo->getTargetNSURI(), fSchemaInfo);
- redefSchemaInfo->addSchemaInfo(fSchemaInfo, SchemaInfo::INCLUDE);
- fPreprocessedNodes->put((void*) redefineElem, fSchemaInfo);
newSchemaInfo.release();
+ redefSchemaInfo->addSchemaInfo(fSchemaInfo, SchemaInfo::INCLUDE);
+ fPreprocessedNodes->put((void*) redefineElem, fSchemaInfo);
}
return true;
@@ -8490,7 +8503,6 @@
fXSDErrorReporter.emitError(except, fLocator);
}
-
// ---------------------------------------------------------------------------
// TraverseSchema: Init/CleanUp methods
// ---------------------------------------------------------------------------
@@ -8511,6 +8523,7 @@
(
ENUM_ELT_SIZE * sizeof(ValueVectorOf<unsigned int>*)
);//new ValueVectorOf<unsigned int>*[ENUM_ELT_SIZE];
+ memset(fGlobalDeclarations, 0, ENUM_ELT_SIZE * sizeof(ValueVectorOf<unsigned int>*));
for(unsigned int i=0; i < ENUM_ELT_SIZE; i++)
fGlobalDeclarations[i] = new (fMemoryManager) ValueVectorOf<unsigned int>(8, fMemoryManager);
@@ -8534,10 +8547,12 @@
delete fCurrentTypeNameStack;
delete fCurrentGroupStack;
- for(unsigned int i=0; i < ENUM_ELT_SIZE; i++)
- delete fGlobalDeclarations[i];
-
- fMemoryManager->deallocate(fGlobalDeclarations);//delete [] fGlobalDeclarations;
+ if (fGlobalDeclarations)
+ {
+ for(unsigned int i=0; i < ENUM_ELT_SIZE; i++)
+ delete fGlobalDeclarations[i];
+ fMemoryManager->deallocate(fGlobalDeclarations);//delete [] fGlobalDeclarations;
+ }
delete fNonXSAttList;
delete fNotationRegistry;
Modified: xerces/c/branches/xerces-2.7/src/xercesc/validators/schema/XMLSchemaDescriptionImpl.cpp
URL: http://svn.apache.org/viewvc/xerces/c/branches/xerces-2.7/src/xercesc/validators/schema/XMLSchemaDescriptionImpl.cpp?rev=419674&r1=419673&r2=419674&view=diff
==============================================================================
--- xerces/c/branches/xerces-2.7/src/xercesc/validators/schema/XMLSchemaDescriptionImpl.cpp (original)
+++ xerces/c/branches/xerces-2.7/src/xercesc/validators/schema/XMLSchemaDescriptionImpl.cpp Thu Jul 6 12:31:01 2006
@@ -111,9 +111,11 @@
void XMLSchemaDescriptionImpl::setTargetNamespace(const XMLCh* const newNamespace)
{
- if (fNamespace)
+ if (fNamespace) {
XMLGrammarDescription::getMemoryManager()->deallocate((void*)fNamespace);
-
+ fNamespace = 0;
+ }
+
fNamespace = XMLString::replicate(newNamespace, XMLGrammarDescription::getMemoryManager());
}
@@ -124,18 +126,22 @@
void XMLSchemaDescriptionImpl::setTriggeringComponent(QName* const trigComponent)
{
- if ( fTriggeringComponent)
+ if ( fTriggeringComponent) {
delete fTriggeringComponent;
-
+ fTriggeringComponent = 0;
+ }
+
fTriggeringComponent = new (trigComponent->getMemoryManager()) QName(*trigComponent);
}
void XMLSchemaDescriptionImpl::setEnclosingElementName(QName* const encElement)
{
- if (fEnclosingElementName)
+ if (fEnclosingElementName) {
delete fEnclosingElementName;
-
+ fEnclosingElementName = 0;
+ }
+
fEnclosingElementName = new (encElement->getMemoryManager()) QName(*encElement);
}
---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@xerces.apache.org
For additional commands, e-mail: commits-help@xerces.apache.org