Modified: xerces/c/trunk/src/xercesc/util/XMLString.cpp URL: http://svn.apache.org/viewcvs/xerces/c/trunk/src/xercesc/util/XMLString.cpp?rev=180348&r1=180347&r2=180348&view=diff ============================================================================== --- xerces/c/trunk/src/xercesc/util/XMLString.cpp (original) +++ xerces/c/trunk/src/xercesc/util/XMLString.cpp Mon Jun 6 10:41:39 2005 @@ -43,6 +43,7 @@ #include <xercesc/util/XMLUniDefs.hpp> #include <xercesc/util/XMLUni.hpp> #include <xercesc/util/XMLUri.hpp> +#include <xercesc/util/XMLURL.hpp> #include <xercesc/internal/XMLReader.hpp> XERCES_CPP_NAMESPACE_BEGIN @@ -647,32 +648,37 @@ (colPos == nameLen - 1) ) // <URI>':' return false; - // Examine URI - if (colPos > 0) + + // Examine localpart + if (!XMLString::isValidNCName(&name[colPos+1])) + { + return false; + } + else if (colPos == 0) + { + return true; + } + else { - XMLCh* temp = (XMLCh*) &(name[colPos]); - *temp = 0; + // Examine URI + XMLCh* const temp = + (XMLCh*) manager->allocate((colPos + 1) * sizeof(XMLCh)); + const ArrayJanitor<XMLCh> jan(temp, manager); + + copyNString(temp, name, colPos); + temp[colPos] = 0; try { - XMLUri newURI(name, manager); // no relative uri support here - *temp = chColon; + XMLUri newURI(temp, manager); // no relative uri support here } - catch(const OutOfMemoryException&) + catch (const MalformedURLException&) { - *temp = chColon; return false; } - catch (...) - { - *temp = chColon; - return false; - } - } - - // Examine localpart - return XMLString::isValidNCName(&(name[colPos+1])); + return true; + } } @@ -1662,7 +1668,7 @@ ( (strLen+1) * sizeof(XMLCh) );//new XMLCh[strLen+1]; - XMLCh* retPtr = &(retBuf[0]); + XMLCh* retPtr = &retBuf[0]; XMLCh* startPtr = toConvert; while ( *startPtr ) @@ -1762,7 +1768,7 @@ ( (endPtr - startPtr + 1) * sizeof(XMLCh) );//new XMLCh[endPtr - startPtr + 1]; - XMLCh* retPtr = &(retBuf[0]); + XMLCh* retPtr = &retBuf[0]; bool inSpace = false; while (startPtr < endPtr) { @@ -1809,7 +1815,7 @@ ( (XMLString::stringLen(toConvert) + 1) * sizeof(XMLCh) );//new XMLCh[ XMLString::stringLen(toConvert) + 1]; - XMLCh* retPtr = &(retBuf[0]); + XMLCh* retPtr = &retBuf[0]; XMLCh* startPtr = toConvert; while (*startPtr)
Modified: xerces/c/trunk/src/xercesc/util/XMLStringTokenizer.cpp URL: http://svn.apache.org/viewcvs/xerces/c/trunk/src/xercesc/util/XMLStringTokenizer.cpp?rev=180348&r1=180347&r2=180348&view=diff ============================================================================== --- xerces/c/trunk/src/xercesc/util/XMLStringTokenizer.cpp (original) +++ xerces/c/trunk/src/xercesc/util/XMLStringTokenizer.cpp Mon Jun 6 10:41:39 2005 @@ -54,6 +54,7 @@ // --------------------------------------------------------------------------- // Includes // --------------------------------------------------------------------------- +#include <xercesc/util/Janitor.hpp> #include <xercesc/util/XMLStringTokenizer.hpp> #include <xercesc/util/XMLUniDefs.hpp> #include <xercesc/util/OutOfMemoryException.hpp> @@ -71,6 +72,9 @@ // --------------------------------------------------------------------------- // XMLStringTokenizer: Constructors and Destructor // --------------------------------------------------------------------------- + +typedef JanitorMemFunCall<XMLStringTokenizer> CleanupType; + XMLStringTokenizer::XMLStringTokenizer( const XMLCh* const srcStr , MemoryManager* const manager) : fOffset(0) @@ -80,6 +84,8 @@ , fTokens(0) , fMemoryManager(manager) { + CleanupType cleanup(this, &XMLStringTokenizer::cleanUp); + try { if (fStringLen > 0) { fTokens = new (fMemoryManager) RefArrayVectorOf<XMLCh>(4, true, fMemoryManager); @@ -87,11 +93,12 @@ } catch(const OutOfMemoryException&) { + cleanup.release(); + throw; } - catch(...) { - cleanUp(); - } + + cleanup.release(); } XMLStringTokenizer::XMLStringTokenizer(const XMLCh* const srcStr, @@ -104,6 +111,8 @@ , fTokens(0) , fMemoryManager(manager) { + CleanupType cleanup(this, &XMLStringTokenizer::cleanUp); + try { @@ -114,11 +123,12 @@ } catch(const OutOfMemoryException&) { + cleanup.release(); + throw; } - catch(...) { - cleanUp(); - } + + cleanup.release(); } XMLStringTokenizer::~XMLStringTokenizer() Modified: xerces/c/trunk/src/xercesc/util/XMLURL.cpp URL: http://svn.apache.org/viewcvs/xerces/c/trunk/src/xercesc/util/XMLURL.cpp?rev=180348&r1=180347&r2=180348&view=diff ============================================================================== --- xerces/c/trunk/src/xercesc/util/XMLURL.cpp (original) +++ xerces/c/trunk/src/xercesc/util/XMLURL.cpp Mon Jun 6 10:41:39 2005 @@ -164,6 +164,8 @@ { } +typedef JanitorMemFunCall<XMLURL> CleanupType; + XMLURL::XMLURL(const XMLCh* const baseURL , const XMLCh* const relativeURL , MemoryManager* const manager) : @@ -180,19 +182,20 @@ , fURLText(0) , fHasInvalidChar(false) { + CleanupType cleanup(this, &XMLURL::cleanUp); + try { setURL(baseURL, relativeURL); } catch(const OutOfMemoryException&) { + cleanup.release(); + throw; } - catch(...) - { - cleanup(); - throw; - } + + cleanup.release(); } XMLURL::XMLURL(const XMLCh* const baseURL @@ -211,6 +214,8 @@ , fURLText(0) , fHasInvalidChar(false) { + CleanupType cleanup(this, &XMLURL::cleanUp); + XMLCh* tmpRel = XMLString::transcode(relativeURL, fMemoryManager); ArrayJanitor<XMLCh> janRel(tmpRel, fMemoryManager); try @@ -219,13 +224,12 @@ } catch(const OutOfMemoryException&) { + cleanup.release(); + throw; } - catch(...) - { - cleanup(); - throw; - } + + cleanup.release(); } XMLURL::XMLURL(const XMLURL& baseURL @@ -243,19 +247,20 @@ , fURLText(0) , fHasInvalidChar(false) { + CleanupType cleanup(this, &XMLURL::cleanUp); + try { setURL(baseURL, relativeURL); } catch(const OutOfMemoryException&) { + cleanup.release(); + throw; } - catch(...) - { - cleanup(); - throw; - } + + cleanup.release(); } XMLURL::XMLURL(const XMLURL& baseURL @@ -273,6 +278,8 @@ , fURLText(0) , fHasInvalidChar(false) { + CleanupType cleanup(this, &XMLURL::cleanUp); + XMLCh* tmpRel = XMLString::transcode(relativeURL, fMemoryManager); ArrayJanitor<XMLCh> janRel(tmpRel, fMemoryManager); try @@ -281,14 +288,12 @@ } catch(const OutOfMemoryException&) { - throw; - } - catch(...) - { - cleanup(); + cleanup.release(); + throw; } + cleanup.release(); } XMLURL::XMLURL(const XMLCh* const urlText, @@ -306,19 +311,20 @@ , fURLText(0) , fHasInvalidChar(false) { + CleanupType cleanup(this, &XMLURL::cleanUp); + try { setURL(urlText); } catch(const OutOfMemoryException&) { + cleanup.release(); + throw; } - catch(...) - { - cleanup(); - throw; - } + + cleanup.release(); } XMLURL::XMLURL(const char* const urlText, @@ -336,6 +342,8 @@ , fURLText(0) , fHasInvalidChar(false) { + CleanupType cleanup(this, &XMLURL::cleanUp); + XMLCh* tmpText = XMLString::transcode(urlText, fMemoryManager); ArrayJanitor<XMLCh> janRel(tmpText, fMemoryManager); try @@ -344,13 +352,12 @@ } catch(const OutOfMemoryException&) { + cleanup.release(); + throw; } - catch(...) - { - cleanup(); - throw; - } + + cleanup.release(); } XMLURL::XMLURL(const XMLURL& toCopy) : @@ -367,6 +374,8 @@ , fURLText(0) , fHasInvalidChar(toCopy.fHasInvalidChar) { + CleanupType cleanup(this, &XMLURL::cleanUp); + try { fFragment = XMLString::replicate(toCopy.fFragment, fMemoryManager); @@ -379,18 +388,17 @@ } catch(const OutOfMemoryException&) { + cleanup.release(); + throw; } - catch(...) - { - cleanup(); - throw; - } + + cleanup.release(); } XMLURL::~XMLURL() { - cleanup(); + cleanUp(); } @@ -403,7 +411,7 @@ return *this; // Clean up our stuff - cleanup(); + cleanUp(); // And copy his stuff fMemoryManager = toAssign.fMemoryManager; @@ -473,14 +481,14 @@ // // Try to parse the URL. // - cleanup(); + cleanUp(); parse(urlText); } void XMLURL::setURL(const XMLCh* const baseURL , const XMLCh* const relativeURL) { - cleanup(); + cleanUp(); // Parse our URL string parse(relativeURL); @@ -496,7 +504,7 @@ XMLURL basePart(baseURL, fMemoryManager); if (!conglomerateWithBase(basePart, false)) { - cleanup(); + cleanUp(); ThrowXMLwithMemMgr(MalformedURLException, XMLExcepts::URL_RelativeBaseURL, fMemoryManager); } } @@ -510,7 +518,7 @@ , const XMLCh* const relativeURL , XMLURL& xmlURL) { - cleanup(); + cleanUp(); // Parse our URL string if (parse(relativeURL, xmlURL)) @@ -535,7 +543,7 @@ void XMLURL::setURL(const XMLURL& baseURL , const XMLCh* const relativeURL) { - cleanup(); + cleanUp(); // Parse our URL string parse(relativeURL); @@ -765,7 +773,7 @@ // Just a central place to handle cleanup, since its done from a number // of different spots. // -void XMLURL::cleanup() +void XMLURL::cleanUp() { fMemoryManager->deallocate(fFragment);//delete [] fFragment; fMemoryManager->deallocate(fHost);//delete [] fHost; Modified: xerces/c/trunk/src/xercesc/util/XMLURL.hpp URL: http://svn.apache.org/viewcvs/xerces/c/trunk/src/xercesc/util/XMLURL.hpp?rev=180348&r1=180347&r2=180348&view=diff ============================================================================== --- xerces/c/trunk/src/xercesc/util/XMLURL.hpp (original) +++ xerces/c/trunk/src/xercesc/util/XMLURL.hpp Mon Jun 6 10:41:39 2005 @@ -155,7 +155,7 @@ // Private helper methods // ----------------------------------------------------------------------- void buildFullText(); - void cleanup(); + void cleanUp(); bool conglomerateWithBase(const XMLURL& baseURL, bool useExceptions=true); void parse ( Modified: xerces/c/trunk/src/xercesc/util/XMLUri.cpp URL: http://svn.apache.org/viewcvs/xerces/c/trunk/src/xercesc/util/XMLUri.cpp?rev=180348&r1=180347&r2=180348&view=diff ============================================================================== --- xerces/c/trunk/src/xercesc/util/XMLUri.cpp (original) +++ xerces/c/trunk/src/xercesc/util/XMLUri.cpp Mon Jun 6 10:41:39 2005 @@ -236,6 +236,9 @@ // XMLUri: Constructors and Helper methods // --------------------------------------------------------------------------- // ctor# 2 + +typedef JanitorMemFunCall<XMLUri> CleanupType; + XMLUri::XMLUri(const XMLCh* const uriSpec, MemoryManager* const manager) : fPort(-1) @@ -249,18 +252,19 @@ , fURIText(0) , fMemoryManager(manager) { + CleanupType cleanup(this, &XMLUri::cleanUp); + try { initialize((XMLUri *)0, uriSpec); } catch(const OutOfMemoryException&) { + cleanup.release(); + throw; } - catch (...) - { - cleanUp(); - throw; - } + + cleanup.release(); } // ctor# 7 relative ctor @@ -278,18 +282,19 @@ , fURIText(0) , fMemoryManager(manager) { + CleanupType cleanup(this, &XMLUri::cleanUp); + try { initialize(baseURI, uriSpec); } catch(const OutOfMemoryException&) { + cleanup.release(); + throw; } - catch (...) - { - cleanUp(); - throw; - } + + cleanup.release(); } //Copy constructor @@ -307,36 +312,39 @@ , fURIText(0) , fMemoryManager(toCopy.fMemoryManager) { + CleanupType cleanup(this, &XMLUri::cleanUp); + try { initialize(toCopy); } catch(const OutOfMemoryException&) { - throw; - } - catch (...) - { - cleanUp(); + cleanup.release(); + throw; } + cleanup.release(); } XMLUri& XMLUri::operator=(const XMLUri& toAssign) { cleanUp(); + + CleanupType cleanup(this, &XMLUri::cleanUp); + try { initialize(toAssign); } catch(const OutOfMemoryException&) { + cleanup.release(); + throw; } - catch (...) - { - cleanUp(); - throw; - } + + cleanup.release(); + return *this; } @@ -788,18 +796,7 @@ if (portStr && *portStr) { - try - { - port = XMLString::parseInt(portStr, fMemoryManager); - } - catch(const OutOfMemoryException&) - { - throw; - } - catch (...) - { - throw; - } + port = XMLString::parseInt(portStr, fMemoryManager); } } // if > 0 @@ -1144,18 +1141,7 @@ , fMemoryManager); } - try - { - isConformantUserInfo(newUserInfo, fMemoryManager); - } - catch(const OutOfMemoryException&) - { - throw; - } - catch (...) - { - throw; - } + isConformantUserInfo(newUserInfo, fMemoryManager); if (getUserInfo()) { @@ -2587,4 +2573,3 @@ } XERCES_CPP_NAMESPACE_END - Modified: xerces/c/trunk/src/xercesc/util/regx/BMPattern.cpp URL: http://svn.apache.org/viewcvs/xerces/c/trunk/src/xercesc/util/regx/BMPattern.cpp?rev=180348&r1=180347&r2=180348&view=diff ============================================================================== --- xerces/c/trunk/src/xercesc/util/regx/BMPattern.cpp (original) +++ xerces/c/trunk/src/xercesc/util/regx/BMPattern.cpp Mon Jun 6 10:41:39 2005 @@ -56,6 +56,9 @@ // --------------------------------------------------------------------------- // BMPattern: Constructors // --------------------------------------------------------------------------- + +typedef JanitorMemFunCall<BMPattern> CleanupType; + BMPattern::BMPattern( const XMLCh* const pattern , bool ignoreCase , MemoryManager* const manager) : @@ -67,19 +70,20 @@ , fUppercasePattern(0) , fMemoryManager(manager) { + CleanupType cleanup(this, &BMPattern::cleanUp); + try { fPattern = XMLString::replicate(pattern, fMemoryManager); initialize(); } catch(const OutOfMemoryException&) { + cleanup.release(); + throw; } - catch(...) { - cleanUp(); - throw; - } + cleanup.release(); } BMPattern::BMPattern( const XMLCh* const pattern @@ -94,19 +98,20 @@ , fUppercasePattern(0) , fMemoryManager(manager) { + CleanupType cleanup(this, &BMPattern::cleanUp); + try { fPattern = XMLString::replicate(pattern, fMemoryManager); initialize(); } catch(const OutOfMemoryException&) { + cleanup.release(); + throw; } - catch(...) { - cleanUp(); - throw; - } + cleanup.release(); } BMPattern::~BMPattern() { Modified: xerces/c/trunk/src/xercesc/util/regx/RangeTokenMap.cpp URL: http://svn.apache.org/viewcvs/xerces/c/trunk/src/xercesc/util/regx/RangeTokenMap.cpp?rev=180348&r1=180347&r2=180348&view=diff ============================================================================== --- xerces/c/trunk/src/xercesc/util/regx/RangeTokenMap.cpp (original) +++ xerces/c/trunk/src/xercesc/util/regx/RangeTokenMap.cpp Mon Jun 6 10:41:39 2005 @@ -100,6 +100,7 @@ #include <xercesc/util/XMLRegisterCleanup.hpp> #include <xercesc/util/StringPool.hpp> #include <xercesc/util/XMLInitializer.hpp> +#include <xercesc/util/OutOfMemoryException.hpp> XERCES_CPP_NAMESPACE_BEGIN @@ -170,6 +171,9 @@ // --------------------------------------------------------------------------- // RangeTokenMap: Constructors and Destructor // --------------------------------------------------------------------------- + +typedef JanitorMemFunCall<RangeTokenMap> CleanupType; + RangeTokenMap::RangeTokenMap(MemoryManager* manager) : fTokenRegistry(0) , fRangeMap(0) @@ -177,6 +181,8 @@ , fTokenFactory(0) , fMutex(manager) { + CleanupType cleanup(this, &RangeTokenMap::cleanUp); + try { fTokenRegistry = new (manager) RefHashTableOf<RangeTokenElemMap>(109, manager); fRangeMap = new (manager) RefHashTableOf<RangeFactory>(29, manager); @@ -184,25 +190,19 @@ fTokenFactory = new (manager) TokenFactory(manager); initializeRegistry(); } - catch(...) { - cleanUp(); + catch(const OutOfMemoryException&) + { + cleanup.release(); + throw; } + + cleanup.release(); } RangeTokenMap::~RangeTokenMap() { - delete fTokenRegistry; - fTokenRegistry = 0; - - delete fRangeMap; - fRangeMap = 0; - - delete fCategories; - fCategories = 0; - - delete fTokenFactory; - fTokenFactory = 0; + cleanUp(); } // --------------------------------------------------------------------------- Modified: xerces/c/trunk/src/xercesc/util/regx/RegularExpression.cpp URL: http://svn.apache.org/viewcvs/xerces/c/trunk/src/xercesc/util/regx/RegularExpression.cpp?rev=180348&r1=180347&r2=180348&view=diff ============================================================================== --- xerces/c/trunk/src/xercesc/util/regx/RegularExpression.cpp (original) +++ xerces/c/trunk/src/xercesc/util/regx/RegularExpression.cpp Mon Jun 6 10:41:39 2005 @@ -256,6 +256,9 @@ // --------------------------------------------------------------------------- // RegularExpression: Constructors and Destructors // --------------------------------------------------------------------------- + +typedef JanitorMemFunCall<RegularExpression> CleanupType; + RegularExpression::RegularExpression(const char* const pattern, MemoryManager* const manager) :fHasBackReferences(false), @@ -274,6 +277,8 @@ fTokenFactory(0), fMemoryManager(manager) { + CleanupType cleanup(this, &RegularExpression::cleanUp); + try { XMLCh* tmpBuf = XMLString::transcode(pattern, fMemoryManager); @@ -282,13 +287,12 @@ } catch(const OutOfMemoryException&) { + cleanup.release(); + throw; } - catch (...) { - cleanUp(); - throw; - } + cleanup.release(); } RegularExpression::RegularExpression(const char* const pattern, @@ -310,6 +314,8 @@ fTokenFactory(0), fMemoryManager(manager) { + CleanupType cleanup(this, &RegularExpression::cleanUp); + try { XMLCh* tmpBuf = XMLString::transcode(pattern, fMemoryManager); @@ -320,13 +326,12 @@ } catch(const OutOfMemoryException&) { + cleanup.release(); + throw; } - catch (...) { - cleanUp(); - throw; - } + cleanup.release(); } @@ -348,19 +353,20 @@ fTokenFactory(0), fMemoryManager(manager) { + CleanupType cleanup(this, &RegularExpression::cleanUp); + try { setPattern(pattern); } catch(const OutOfMemoryException&) { + cleanup.release(); + throw; } - catch (...) { - cleanUp(); - throw; - } + cleanup.release(); } RegularExpression::RegularExpression(const XMLCh* const pattern, @@ -382,19 +388,20 @@ fTokenFactory(0), fMemoryManager(manager) { + CleanupType cleanup(this, &RegularExpression::cleanUp); + try { setPattern(pattern, options); } catch(const OutOfMemoryException&) { + cleanup.release(); + throw; } - catch (...) { - cleanUp(); - throw; - } + cleanup.release(); } RegularExpression::~RegularExpression() { @@ -1567,7 +1574,6 @@ } - /* * Prepares for matching. This method is called during construction. */ @@ -1655,7 +1661,7 @@ if (isSet(fOptions, USE_UNICODE_CATEGORY)) { - if (fWordRange == 0) { + if (fWordRange == 0) { fWordRange = fTokenFactory->getRange(fgUniIsWord); if (fWordRange == 0) Modified: xerces/c/trunk/src/xercesc/validators/datatype/AnyURIDatatypeValidator.cpp URL: http://svn.apache.org/viewcvs/xerces/c/trunk/src/xercesc/validators/datatype/AnyURIDatatypeValidator.cpp?rev=180348&r1=180347&r2=180348&view=diff ============================================================================== --- xerces/c/trunk/src/xercesc/validators/datatype/AnyURIDatatypeValidator.cpp (original) +++ xerces/c/trunk/src/xercesc/validators/datatype/AnyURIDatatypeValidator.cpp Mon Jun 6 10:41:39 2005 @@ -118,18 +118,7 @@ , MemoryManager* const manager) :AbstractStringValidator(baseValidator, facets, finalSet, DatatypeValidator::AnyURI, manager) { - try - { - init(enums, manager); - } - catch(const OutOfMemoryException&) - { - throw; - } - catch (...) - { - throw; - } + init(enums, manager); } DatatypeValidator* AnyURIDatatypeValidator::newInstance( Modified: xerces/c/trunk/src/xercesc/validators/datatype/DateDatatypeValidator.cpp URL: http://svn.apache.org/viewcvs/xerces/c/trunk/src/xercesc/validators/datatype/DateDatatypeValidator.cpp?rev=180348&r1=180347&r2=180348&view=diff ============================================================================== --- xerces/c/trunk/src/xercesc/validators/datatype/DateDatatypeValidator.cpp (original) +++ xerces/c/trunk/src/xercesc/validators/datatype/DateDatatypeValidator.cpp Mon Jun 6 10:41:39 2005 @@ -109,6 +109,7 @@ XMLDateTime* DateDatatypeValidator::parse(const XMLCh* const content, MemoryManager* const manager) { XMLDateTime *pRetDate = new (manager) XMLDateTime(content, manager); + Janitor<XMLDateTime> jan(pRetDate); try { @@ -116,15 +117,12 @@ } catch(const OutOfMemoryException&) { - throw; - } - catch (...) - { - delete pRetDate; + jan.release(); + throw; } - return pRetDate; + return jan.release(); } void DateDatatypeValidator::parse(XMLDateTime* const pDate) Modified: xerces/c/trunk/src/xercesc/validators/datatype/DateTimeDatatypeValidator.cpp URL: http://svn.apache.org/viewcvs/xerces/c/trunk/src/xercesc/validators/datatype/DateTimeDatatypeValidator.cpp?rev=180348&r1=180347&r2=180348&view=diff ============================================================================== --- xerces/c/trunk/src/xercesc/validators/datatype/DateTimeDatatypeValidator.cpp (original) +++ xerces/c/trunk/src/xercesc/validators/datatype/DateTimeDatatypeValidator.cpp Mon Jun 6 10:41:39 2005 @@ -119,6 +119,7 @@ XMLDateTime* DateTimeDatatypeValidator::parse(const XMLCh* const content, MemoryManager* const manager) { XMLDateTime *pRetDate = new (manager) XMLDateTime(content, manager); + Janitor<XMLDateTime> jan(pRetDate); try { @@ -126,15 +127,12 @@ } catch(const OutOfMemoryException&) { - throw; - } - catch (...) - { - delete pRetDate; + jan.release(); + throw; } - return pRetDate; + return jan.release(); } void DateTimeDatatypeValidator::parse(XMLDateTime* const pDate) Modified: xerces/c/trunk/src/xercesc/validators/datatype/DayDatatypeValidator.cpp URL: http://svn.apache.org/viewcvs/xerces/c/trunk/src/xercesc/validators/datatype/DayDatatypeValidator.cpp?rev=180348&r1=180347&r2=180348&view=diff ============================================================================== --- xerces/c/trunk/src/xercesc/validators/datatype/DayDatatypeValidator.cpp (original) +++ xerces/c/trunk/src/xercesc/validators/datatype/DayDatatypeValidator.cpp Mon Jun 6 10:41:39 2005 @@ -109,6 +109,7 @@ XMLDateTime* DayDatatypeValidator::parse(const XMLCh* const content, MemoryManager* const manager) { XMLDateTime *pRetDate = new (manager) XMLDateTime(content, manager); + Janitor<XMLDateTime> jan(pRetDate); try { @@ -116,15 +117,12 @@ } catch(const OutOfMemoryException&) { - throw; - } - catch (...) - { - delete pRetDate; + jan.release(); + throw; } - return pRetDate; + return jan.release(); } void DayDatatypeValidator::parse(XMLDateTime* const pDate) Modified: xerces/c/trunk/src/xercesc/validators/datatype/DurationDatatypeValidator.cpp URL: http://svn.apache.org/viewcvs/xerces/c/trunk/src/xercesc/validators/datatype/DurationDatatypeValidator.cpp?rev=180348&r1=180347&r2=180348&view=diff ============================================================================== --- xerces/c/trunk/src/xercesc/validators/datatype/DurationDatatypeValidator.cpp (original) +++ xerces/c/trunk/src/xercesc/validators/datatype/DurationDatatypeValidator.cpp Mon Jun 6 10:41:39 2005 @@ -112,6 +112,7 @@ XMLDateTime* DurationDatatypeValidator::parse(const XMLCh* const content, MemoryManager* const manager) { XMLDateTime *pRetDate = new (manager) XMLDateTime(content, manager); + Janitor<XMLDateTime> jan(pRetDate); try { @@ -119,15 +120,12 @@ } catch(const OutOfMemoryException&) { - throw; - } - catch (...) - { - delete pRetDate; + jan.release(); + throw; } - return pRetDate; + return jan.release(); } void DurationDatatypeValidator::parse(XMLDateTime* const pDate) Modified: xerces/c/trunk/src/xercesc/validators/datatype/ListDatatypeValidator.cpp URL: http://svn.apache.org/viewcvs/xerces/c/trunk/src/xercesc/validators/datatype/ListDatatypeValidator.cpp?rev=180348&r1=180347&r2=180348&view=diff ============================================================================== --- xerces/c/trunk/src/xercesc/validators/datatype/ListDatatypeValidator.cpp (original) +++ xerces/c/trunk/src/xercesc/validators/datatype/ListDatatypeValidator.cpp Mon Jun 6 10:41:39 2005 @@ -430,6 +430,7 @@ { // ask the itemType for a complete check BaseRefVectorOf<XMLCh>* tempList = XMLString::tokenizeString(getEnumeration()->elementAt(i), manager); + Janitor<BaseRefVectorOf<XMLCh> > jan(tempList); int tokenNumber = tempList->size(); try @@ -439,15 +440,10 @@ } catch(const OutOfMemoryException&) { + jan.release(); + throw; } - catch (...) - { - delete tempList; - throw; - } - - delete tempList; // enum shall pass this->checkContent() as well. checkContent(getEnumeration()->elementAt(i), (ValidationContext*)0, false, manager); Modified: xerces/c/trunk/src/xercesc/validators/datatype/MonthDatatypeValidator.cpp URL: http://svn.apache.org/viewcvs/xerces/c/trunk/src/xercesc/validators/datatype/MonthDatatypeValidator.cpp?rev=180348&r1=180347&r2=180348&view=diff ============================================================================== --- xerces/c/trunk/src/xercesc/validators/datatype/MonthDatatypeValidator.cpp (original) +++ xerces/c/trunk/src/xercesc/validators/datatype/MonthDatatypeValidator.cpp Mon Jun 6 10:41:39 2005 @@ -109,6 +109,7 @@ XMLDateTime* MonthDatatypeValidator::parse(const XMLCh* const content, MemoryManager* const manager) { XMLDateTime *pRetDate = new (manager) XMLDateTime(content, manager); + Janitor<XMLDateTime> jan(pRetDate); try { @@ -116,15 +117,12 @@ } catch(const OutOfMemoryException&) { - throw; - } - catch (...) - { - delete pRetDate; + jan.release(); + throw; } - return pRetDate; + return jan.release(); } void MonthDatatypeValidator::parse(XMLDateTime* const pDate) Modified: xerces/c/trunk/src/xercesc/validators/datatype/MonthDayDatatypeValidator.cpp URL: http://svn.apache.org/viewcvs/xerces/c/trunk/src/xercesc/validators/datatype/MonthDayDatatypeValidator.cpp?rev=180348&r1=180347&r2=180348&view=diff ============================================================================== --- xerces/c/trunk/src/xercesc/validators/datatype/MonthDayDatatypeValidator.cpp (original) +++ xerces/c/trunk/src/xercesc/validators/datatype/MonthDayDatatypeValidator.cpp Mon Jun 6 10:41:39 2005 @@ -109,6 +109,7 @@ XMLDateTime* MonthDayDatatypeValidator::parse(const XMLCh* const content, MemoryManager* const manager) { XMLDateTime *pRetDate = new (manager) XMLDateTime(content, manager); + Janitor<XMLDateTime> jan(pRetDate); try { @@ -116,15 +117,12 @@ } catch(const OutOfMemoryException&) { - throw; - } - catch (...) - { - delete pRetDate; + jan.release(); + throw; } - return pRetDate; + return jan.release(); } void MonthDayDatatypeValidator::parse(XMLDateTime* const pDate) Modified: xerces/c/trunk/src/xercesc/validators/datatype/TimeDatatypeValidator.cpp URL: http://svn.apache.org/viewcvs/xerces/c/trunk/src/xercesc/validators/datatype/TimeDatatypeValidator.cpp?rev=180348&r1=180347&r2=180348&view=diff ============================================================================== --- xerces/c/trunk/src/xercesc/validators/datatype/TimeDatatypeValidator.cpp (original) +++ xerces/c/trunk/src/xercesc/validators/datatype/TimeDatatypeValidator.cpp Mon Jun 6 10:41:39 2005 @@ -122,6 +122,7 @@ XMLDateTime* TimeDatatypeValidator::parse(const XMLCh* const content, MemoryManager* const manager) { XMLDateTime *pRetDate = new (manager) XMLDateTime(content, manager); + Janitor<XMLDateTime> jan(pRetDate); try { @@ -129,15 +130,12 @@ } catch(const OutOfMemoryException&) { - throw; - } - catch (...) - { - delete pRetDate; + jan.release(); + throw; } - return pRetDate; + return jan.release(); } void TimeDatatypeValidator::parse(XMLDateTime* const pDate) Modified: xerces/c/trunk/src/xercesc/validators/datatype/UnionDatatypeValidator.cpp URL: http://svn.apache.org/viewcvs/xerces/c/trunk/src/xercesc/validators/datatype/UnionDatatypeValidator.cpp?rev=180348&r1=180347&r2=180348&view=diff ============================================================================== --- xerces/c/trunk/src/xercesc/validators/datatype/UnionDatatypeValidator.cpp (original) +++ xerces/c/trunk/src/xercesc/validators/datatype/UnionDatatypeValidator.cpp Mon Jun 6 10:41:39 2005 @@ -173,6 +173,8 @@ fMemberTypeValidators = memberTypeValidators; } +typedef JanitorMemFunCall<UnionDatatypeValidator> CleanupType; + UnionDatatypeValidator::UnionDatatypeValidator( DatatypeValidator* const baseValidator , RefHashTableOf<KVStringPair>* const facets @@ -210,19 +212,22 @@ , manager); } + CleanupType cleanup(this, &UnionDatatypeValidator::cleanUp); + try { init(baseValidator, facets, enums, manager); } catch(const OutOfMemoryException&) { + // Don't cleanup when out of memory, since executing the + // code can cause problems. + cleanup.release(); + throw; } - catch (...) - { - cleanUp(); - throw; - } + + cleanup.release(); } void UnionDatatypeValidator::init(DatatypeValidator* const baseValidator Modified: xerces/c/trunk/src/xercesc/validators/datatype/YearDatatypeValidator.cpp URL: http://svn.apache.org/viewcvs/xerces/c/trunk/src/xercesc/validators/datatype/YearDatatypeValidator.cpp?rev=180348&r1=180347&r2=180348&view=diff ============================================================================== --- xerces/c/trunk/src/xercesc/validators/datatype/YearDatatypeValidator.cpp (original) +++ xerces/c/trunk/src/xercesc/validators/datatype/YearDatatypeValidator.cpp Mon Jun 6 10:41:39 2005 @@ -109,6 +109,7 @@ XMLDateTime* YearDatatypeValidator::parse(const XMLCh* const content, MemoryManager* const manager) { XMLDateTime *pRetDate = new (manager) XMLDateTime(content, manager); + Janitor<XMLDateTime> jan(pRetDate); try { @@ -116,15 +117,12 @@ } catch(const OutOfMemoryException&) { - throw; - } - catch (...) - { - delete pRetDate; + jan.release(); + throw; } - return pRetDate; + return jan.release(); } void YearDatatypeValidator::parse(XMLDateTime* const pDate) Modified: xerces/c/trunk/src/xercesc/validators/datatype/YearMonthDatatypeValidator.cpp URL: http://svn.apache.org/viewcvs/xerces/c/trunk/src/xercesc/validators/datatype/YearMonthDatatypeValidator.cpp?rev=180348&r1=180347&r2=180348&view=diff ============================================================================== --- xerces/c/trunk/src/xercesc/validators/datatype/YearMonthDatatypeValidator.cpp (original) +++ xerces/c/trunk/src/xercesc/validators/datatype/YearMonthDatatypeValidator.cpp Mon Jun 6 10:41:39 2005 @@ -109,6 +109,7 @@ XMLDateTime* YearMonthDatatypeValidator::parse(const XMLCh* const content, MemoryManager* const manager) { XMLDateTime *pRetDate = new (manager) XMLDateTime(content, manager); + Janitor<XMLDateTime> jan(pRetDate); try { @@ -116,15 +117,12 @@ } catch(const OutOfMemoryException&) { - throw; - } - catch (...) - { - delete pRetDate; + jan.release(); + throw; } - return pRetDate; + return jan.release(); } void YearMonthDatatypeValidator::parse(XMLDateTime* const pDate) Modified: xerces/c/trunk/src/xercesc/validators/schema/SchemaGrammar.cpp URL: http://svn.apache.org/viewcvs/xerces/c/trunk/src/xercesc/validators/schema/SchemaGrammar.cpp?rev=180348&r1=180347&r2=180348&view=diff ============================================================================== --- xerces/c/trunk/src/xercesc/validators/schema/SchemaGrammar.cpp (original) +++ xerces/c/trunk/src/xercesc/validators/schema/SchemaGrammar.cpp Mon Jun 6 10:41:39 2005 @@ -138,6 +138,8 @@ XERCES_CPP_NAMESPACE_BEGIN +typedef JanitorMemFunCall<SchemaGrammar> CleanupType; + // --------------------------------------------------------------------------- // SchemaGrammar: Constructors and Destructor // --------------------------------------------------------------------------- @@ -160,6 +162,8 @@ , fValidated(false) , fDatatypeRegistry(manager) { + CleanupType cleanup(this, &SchemaGrammar::cleanUp); + // // Init all the pool members. // @@ -195,13 +199,12 @@ } catch(const OutOfMemoryException&) { - throw; - } - catch(...) { + cleanup.release(); - cleanUp(); throw; } + + cleanup.release(); } SchemaGrammar::~SchemaGrammar() Modified: xerces/c/trunk/src/xercesc/validators/schema/TraverseSchema.cpp URL: http://svn.apache.org/viewcvs/xerces/c/trunk/src/xercesc/validators/schema/TraverseSchema.cpp?rev=180348&r1=180347&r2=180348&view=diff ============================================================================== --- xerces/c/trunk/src/xercesc/validators/schema/TraverseSchema.cpp (original) +++ xerces/c/trunk/src/xercesc/validators/schema/TraverseSchema.cpp Mon Jun 6 10:41:39 2005 @@ -158,6 +158,8 @@ ENUM_ELT_SIZE }; +typedef JanitorMemFunCall<TraverseSchema> CleanupType; + // --------------------------------------------------------------------------- // TraverseSchema: Constructors and Destructor // --------------------------------------------------------------------------- @@ -219,6 +221,7 @@ , fAnnotation(0) , fAttributeCheck(manager) { + CleanupType cleanup(this, &TraverseSchema::cleanUp); try { @@ -232,13 +235,12 @@ } catch(const OutOfMemoryException&) { - throw; - } - catch(...) { + cleanup.release(); - cleanUp(); throw; } + + cleanup.release(); } Modified: xerces/c/trunk/src/xercesc/validators/schema/identity/FieldValueMap.cpp URL: http://svn.apache.org/viewcvs/xerces/c/trunk/src/xercesc/validators/schema/identity/FieldValueMap.cpp?rev=180348&r1=180347&r2=180348&view=diff ============================================================================== --- xerces/c/trunk/src/xercesc/validators/schema/identity/FieldValueMap.cpp (original) +++ xerces/c/trunk/src/xercesc/validators/schema/identity/FieldValueMap.cpp Mon Jun 6 10:41:39 2005 @@ -52,10 +52,13 @@ // Includes // --------------------------------------------------------------------------- #include <xercesc/validators/schema/identity/FieldValueMap.hpp> +#include <xercesc/util/Janitor.hpp> #include <xercesc/util/OutOfMemoryException.hpp> XERCES_CPP_NAMESPACE_BEGIN +typedef JanitorMemFunCall<FieldValueMap> CleanupType; + // --------------------------------------------------------------------------- // FieldValueMap: Constructors and Destructor // --------------------------------------------------------------------------- @@ -74,34 +77,41 @@ , fValues(0) , fMemoryManager(other.fMemoryManager) { - try { - if (other.fFields) { + if (other.fFields) { + CleanupType cleanup(this, &FieldValueMap::cleanUp); + + try { + + unsigned int valuesSize = other.fValues->size(); - unsigned int valuesSize = other.fValues->size(); + fFields = new (fMemoryManager) ValueVectorOf<IC_Field*>(*(other.fFields)); + fValidators = new (fMemoryManager) ValueVectorOf<DatatypeValidator*>(*(other.fValidators)); + fValues = new (fMemoryManager) RefArrayVectorOf<XMLCh>(other.fFields->curCapacity(), true, fMemoryManager); - fFields = new (fMemoryManager) ValueVectorOf<IC_Field*>(*(other.fFields)); - fValidators = new (fMemoryManager) ValueVectorOf<DatatypeValidator*>(*(other.fValidators)); - fValues = new (fMemoryManager) RefArrayVectorOf<XMLCh>(other.fFields->curCapacity(), true, fMemoryManager); - - for (unsigned int i=0; i<valuesSize; i++) { - fValues->addElement(XMLString::replicate(other.fValues->elementAt(i), fMemoryManager)); - } + for (unsigned int i=0; i<valuesSize; i++) { + fValues->addElement(XMLString::replicate(other.fValues->elementAt(i), fMemoryManager)); + } + } + catch(const OutOfMemoryException&) + { + cleanup.release(); + + throw; } - } - catch(const OutOfMemoryException&) - { - throw; - } - catch(...) { - delete fFields; - delete fValidators; - delete fValues; - throw; + cleanup.release(); } } FieldValueMap::~FieldValueMap() +{ + cleanUp(); +} + +// --------------------------------------------------------------------------- +// FieldValueMap: Private helper methods. +// --------------------------------------------------------------------------- +void FieldValueMap::cleanUp() { delete fFields; delete fValidators; Modified: xerces/c/trunk/src/xercesc/validators/schema/identity/FieldValueMap.hpp URL: http://svn.apache.org/viewcvs/xerces/c/trunk/src/xercesc/validators/schema/identity/FieldValueMap.hpp?rev=180348&r1=180347&r2=180348&view=diff ============================================================================== --- xerces/c/trunk/src/xercesc/validators/schema/identity/FieldValueMap.hpp (original) +++ xerces/c/trunk/src/xercesc/validators/schema/identity/FieldValueMap.hpp Mon Jun 6 10:41:39 2005 @@ -75,6 +75,11 @@ private: // ----------------------------------------------------------------------- + // Private helper methods + // ----------------------------------------------------------------------- + void cleanUp(); + + // ----------------------------------------------------------------------- // Unimplemented operators // ----------------------------------------------------------------------- FieldValueMap& operator= (const FieldValueMap& other); Modified: xerces/c/trunk/src/xercesc/validators/schema/identity/IdentityConstraint.cpp URL: http://svn.apache.org/viewcvs/xerces/c/trunk/src/xercesc/validators/schema/identity/IdentityConstraint.cpp?rev=180348&r1=180347&r2=180348&view=diff ============================================================================== --- xerces/c/trunk/src/xercesc/validators/schema/identity/IdentityConstraint.cpp (original) +++ xerces/c/trunk/src/xercesc/validators/schema/identity/IdentityConstraint.cpp Mon Jun 6 10:41:39 2005 @@ -77,6 +77,8 @@ XERCES_CPP_NAMESPACE_BEGIN +typedef JanitorMemFunCall<IdentityConstraint> CleanupType; + // --------------------------------------------------------------------------- // IdentityConstraint: Constructors and Destructor // --------------------------------------------------------------------------- @@ -90,19 +92,20 @@ , fMemoryManager(manager) , fNamespaceURI(-1) { + CleanupType cleanup(this, &IdentityConstraint::cleanUp); + try { fIdentityConstraintName = XMLString::replicate(identityConstraintName, fMemoryManager); fElemName = XMLString::replicate(elemName, fMemoryManager); } catch(const OutOfMemoryException&) { - throw; - } - catch(...) { + cleanup.release(); - cleanUp(); throw; } + + cleanup.release(); } Modified: xerces/c/trunk/src/xercesc/validators/schema/identity/IdentityConstraintHandler.cpp URL: http://svn.apache.org/viewcvs/xerces/c/trunk/src/xercesc/validators/schema/identity/IdentityConstraintHandler.cpp?rev=180348&r1=180347&r2=180348&view=diff ============================================================================== --- xerces/c/trunk/src/xercesc/validators/schema/identity/IdentityConstraintHandler.cpp (original) +++ xerces/c/trunk/src/xercesc/validators/schema/identity/IdentityConstraintHandler.cpp Mon Jun 6 10:41:39 2005 @@ -41,6 +41,8 @@ XERCES_CPP_NAMESPACE_BEGIN +typedef JanitorMemFunCall<IdentityConstraintHandler> CleanupType; + // --------------------------------------------------------------------------- // IdentityConstraintHandler: Constructors and Destructor // --------------------------------------------------------------------------- @@ -52,6 +54,7 @@ , fValueStoreCache(0) , fFieldActivator(0) { + CleanupType cleanup(this, &IdentityConstraintHandler::cleanUp); try { @@ -63,12 +66,12 @@ } catch(const OutOfMemoryException&) { + cleanup.release(); + throw; } - catch(...) { - cleanUp(); - throw; - } + + cleanup.release(); } IdentityConstraintHandler::~IdentityConstraintHandler() Modified: xerces/c/trunk/src/xercesc/validators/schema/identity/ValueStoreCache.cpp URL: http://svn.apache.org/viewcvs/xerces/c/trunk/src/xercesc/validators/schema/identity/ValueStoreCache.cpp?rev=180348&r1=180347&r2=180348&view=diff ============================================================================== --- xerces/c/trunk/src/xercesc/validators/schema/identity/ValueStoreCache.cpp (original) +++ xerces/c/trunk/src/xercesc/validators/schema/identity/ValueStoreCache.cpp Mon Jun 6 10:41:39 2005 @@ -65,6 +65,8 @@ XERCES_CPP_NAMESPACE_BEGIN +typedef JanitorMemFunCall<ValueStoreCache> CleanupType; + // --------------------------------------------------------------------------- // ValueStoreCache: Constructors and Destructor // --------------------------------------------------------------------------- @@ -76,17 +78,19 @@ , fScanner(0) , fMemoryManager(manager) { + CleanupType cleanup(this, &ValueStoreCache::cleanUp); + try { init(); } catch(const OutOfMemoryException&) { + cleanup.release(); + throw; } - catch(...) { - cleanUp(); - throw; - } + + cleanup.release(); } Modified: xerces/c/trunk/src/xercesc/validators/schema/identity/XPathMatcher.cpp URL: http://svn.apache.org/viewcvs/xerces/c/trunk/src/xercesc/validators/schema/identity/XPathMatcher.cpp?rev=180348&r1=180347&r2=180348&view=diff ============================================================================== --- xerces/c/trunk/src/xercesc/validators/schema/identity/XPathMatcher.cpp (original) +++ xerces/c/trunk/src/xercesc/validators/schema/identity/XPathMatcher.cpp Mon Jun 6 10:41:39 2005 @@ -73,6 +73,8 @@ XERCES_CPP_NAMESPACE_BEGIN +typedef JanitorMemFunCall<XPathMatcher> CleanupType; + // --------------------------------------------------------------------------- // XPathMatcher: Constructors and Destructor // --------------------------------------------------------------------------- @@ -87,18 +89,19 @@ , fIdentityConstraint(0) , fMemoryManager(manager) { + CleanupType cleanup(this, &XPathMatcher::cleanUp); + try { init(xpath); } catch(const OutOfMemoryException&) { - throw; - } - catch(...) { + cleanup.release(); - cleanUp(); throw; } + + cleanup.release(); } @@ -114,18 +117,19 @@ , fIdentityConstraint(ic) , fMemoryManager(manager) { + CleanupType cleanup(this, &XPathMatcher::cleanUp); + try { init(xpath); } catch(const OutOfMemoryException&) { - throw; - } - catch(...) { + cleanup.release(); - cleanUp(); throw; } + + cleanup.release(); } Modified: xerces/c/trunk/src/xercesc/validators/schema/identity/XPathMatcherStack.cpp URL: http://svn.apache.org/viewcvs/xerces/c/trunk/src/xercesc/validators/schema/identity/XPathMatcherStack.cpp?rev=180348&r1=180347&r2=180348&view=diff ============================================================================== --- xerces/c/trunk/src/xercesc/validators/schema/identity/XPathMatcherStack.cpp (original) +++ xerces/c/trunk/src/xercesc/validators/schema/identity/XPathMatcherStack.cpp Mon Jun 6 10:41:39 2005 @@ -43,34 +43,47 @@ // Includes // --------------------------------------------------------------------------- #include <xercesc/validators/schema/identity/XPathMatcherStack.hpp> +#include <xercesc/util/Janitor.hpp> #include <xercesc/util/OutOfMemoryException.hpp> XERCES_CPP_NAMESPACE_BEGIN +typedef JanitorMemFunCall<XPathMatcherStack> CleanupType; + // --------------------------------------------------------------------------- // XPathMatherStack: Constructors and Destructor // --------------------------------------------------------------------------- XPathMatcherStack::XPathMatcherStack(MemoryManager* const manager) : fMatchersCount(0) - , fContextStack(new (manager) ValueStackOf<int>(8, manager)) + , fContextStack(0) , fMatchers(0) { + CleanupType cleanup(this, &XPathMatcherStack::cleanUp); + try { + fContextStack = new (manager) ValueStackOf<int>(8, manager); fMatchers = new (manager) RefVectorOf<XPathMatcher>(8, true, manager); } catch(const OutOfMemoryException&) { - throw; - } - catch(...) { + cleanup.release(); - delete fContextStack; throw; } + + cleanup.release(); } XPathMatcherStack::~XPathMatcherStack() { + cleanUp(); +} + +// --------------------------------------------------------------------------- +// XPathMatcherStack: Private helper methods. +// --------------------------------------------------------------------------- +void XPathMatcherStack::cleanUp() +{ delete fContextStack; delete fMatchers; } Modified: xerces/c/trunk/src/xercesc/validators/schema/identity/XPathMatcherStack.hpp URL: http://svn.apache.org/viewcvs/xerces/c/trunk/src/xercesc/validators/schema/identity/XPathMatcherStack.hpp?rev=180348&r1=180347&r2=180348&view=diff ============================================================================== --- xerces/c/trunk/src/xercesc/validators/schema/identity/XPathMatcherStack.hpp (original) +++ xerces/c/trunk/src/xercesc/validators/schema/identity/XPathMatcherStack.hpp Mon Jun 6 10:41:39 2005 @@ -63,6 +63,11 @@ private: // ----------------------------------------------------------------------- + // Private helper methods + // ----------------------------------------------------------------------- + void cleanUp(); + + // ----------------------------------------------------------------------- // Unimplemented contstructors and operators // ----------------------------------------------------------------------- XPathMatcherStack(const XPathMatcherStack& other); Modified: xerces/c/trunk/src/xercesc/validators/schema/identity/XercesXPath.cpp URL: http://svn.apache.org/viewcvs/xerces/c/trunk/src/xercesc/validators/schema/identity/XercesXPath.cpp?rev=180348&r1=180347&r2=180348&view=diff ============================================================================== --- xerces/c/trunk/src/xercesc/validators/schema/identity/XercesXPath.cpp (original) +++ xerces/c/trunk/src/xercesc/validators/schema/identity/XercesXPath.cpp Mon Jun 6 10:41:39 2005 @@ -346,6 +346,8 @@ { } +typedef JanitorMemFunCall<XercesXPath> CleanupType; + // --------------------------------------------------------------------------- // XercesPath: Constructors and Destructor // --------------------------------------------------------------------------- @@ -360,6 +362,8 @@ , fLocationPaths(0) , fMemoryManager(manager) { + CleanupType cleanup(this, &XercesXPath::cleanUp); + try { fExpression = XMLString::replicate(xpathExpr, fMemoryManager); @@ -371,13 +375,12 @@ } catch(const OutOfMemoryException&) { - throw; - } - catch(...) { + cleanup.release(); - cleanUp(); throw; } + + cleanup.release(); } XercesXPath::~XercesXPath() { --------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]
