diff --git a/src/xercesc/util/XMLUri.cpp b/src/xercesc/util/XMLUri.cpp index e7500981c4f2b29499c66715b7ef533871878f33..36ce3aa2e2564296ee522bd8ee54d81d9af49e23 100644 --- a/src/xercesc/util/XMLUri.cpp +++ b/src/xercesc/util/XMLUri.cpp @@ -236,9 +236,55 @@ static const XMLCh PATH_SEPARATORS[] = }; // --------------------------------------------------------------------------- -// XMLUri: Constructors and initialization methods +// XMLUri: Constructors and Helper methods // --------------------------------------------------------------------------- +// ctor# 2 +XMLUri::XMLUri(const XMLCh* const uriSpec) +:fScheme(0) +,fUserInfo(0) +,fHost(0) +,fPort(-1) +,fPath(0) +,fQueryString(0) +,fFragment(0) +{ + try { + initialize((XMLUri *)0, uriSpec); + } + catch (...) + { + cleanUp(); + throw; + } +} + +// ctor# 7 relative ctor +XMLUri::XMLUri(const XMLUri* const baseURI + , const XMLCh* const uriSpec) +:fScheme(0) +,fUserInfo(0) +,fHost(0) +,fPort(-1) +,fPath(0) +,fQueryString(0) +,fFragment(0) +{ + try { + initialize(baseURI, uriSpec); + } + catch (...) + { + cleanUp(); + throw; + } +} + XMLUri::~XMLUri() +{ + cleanUp(); +} + +void XMLUri::cleanUp() { if (getScheme()) delete[] fScheme; @@ -802,14 +848,14 @@ void XMLUri::initializePath(const XMLCh* const uriSpec) fFragment = new XMLCh[index - start + 1]; XMLString::subString(fFragment, uriSpec, start, index); } - else + else { // RFC 2396, 4.0. URI Reference // URI-reference = [absoulteURI | relativeURI] [# fragment] // // RFC 2396, 4.1. Fragment Identifier - // fragment = *uric - // + // fragment = *uric + // // empty fragment is valid fFragment = 0; } diff --git a/src/xercesc/util/XMLUri.hpp b/src/xercesc/util/XMLUri.hpp index a81f9b39e1612f5e3a3690c509f6791399c12553..f5934e5efd8e4faed24a91b73b1b940b56992400 100644 --- a/src/xercesc/util/XMLUri.hpp +++ b/src/xercesc/util/XMLUri.hpp @@ -57,6 +57,9 @@ /* * $Id$ * $Log$ + * Revision 1.3 2002/08/23 20:45:24 tng + * .Memory leak fix: XMLUri data not deleted if constructor failed. + * * Revision 1.2 2002/02/20 18:17:02 tng * [Bug 5977] Warnings on generating apiDocs. * @@ -430,6 +433,12 @@ private: */ void initializePath(const XMLCh* const uriSpec); + /** + * cleanup the data variables + * + */ + void cleanUp(); + // ----------------------------------------------------------------------- // Data members // @@ -449,37 +458,6 @@ private: }; -// --------------------------------------------------------------------------- -// XMLUri: Public operators -// --------------------------------------------------------------------------- - -// ctor# 2 -inline XMLUri::XMLUri(const XMLCh* const uriSpec) -:fScheme(0) -,fUserInfo(0) -,fHost(0) -,fPort(-1) -,fPath(0) -,fQueryString(0) -,fFragment(0) -{ - initialize((XMLUri *)0, uriSpec); -} - -// ctor# 7 relative ctor -inline XMLUri::XMLUri(const XMLUri* const baseURI - , const XMLCh* const uriSpec) -:fScheme(0) -,fUserInfo(0) -,fHost(0) -,fPort(-1) -,fPath(0) -,fQueryString(0) -,fFragment(0) -{ - initialize(baseURI, uriSpec); -} - // --------------------------------------------------------------------------- // XMLUri: Getter methods // ---------------------------------------------------------------------------