cargilld 2004/01/12 08:15:57
Modified: c/src/xercesc/internal DGXMLScanner.cpp IGXMLScanner2.cpp
ReaderMgr.cpp SGXMLScanner.cpp XMLScanner.cpp
c/src/xercesc/util XMLURL.cpp XMLURL.hpp
c/src/xercesc/validators/schema TraverseSchema.cpp
Log:
Avoid throwing malformedurl exceptions in XMLURL to avoid a threading problem on AIX.
Revision Changes Path
1.39 +11 -22 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.38
retrieving revision 1.39
diff -u -r1.38 -r1.39
--- DGXMLScanner.cpp 30 Dec 2003 06:00:38 -0000 1.38
+++ DGXMLScanner.cpp 12 Jan 2004 16:15:57 -0000 1.39
@@ -2451,27 +2451,10 @@
ReaderMgr::LastExtEntityInfo lastInfo;
fReaderMgr.getLastExtEntityInfo(lastInfo);
- try
+ XMLURL urlTmp(fMemoryManager);
+ if ((!urlTmp.setURL(lastInfo.systemId, expSysId.getRawBuffer(), urlTmp)) ||
+ (urlTmp.isRelative()))
{
- XMLURL urlTmp(lastInfo.systemId, expSysId.getRawBuffer());
- if (urlTmp.isRelative())
- {
- ThrowXMLwithMemMgr
- (
- MalformedURLException
- , XMLExcepts::URL_NoProtocolPresent
- , fMemoryManager
- );
- }
- else {
- if (fStandardUriConformant && urlTmp.hasInvalidChar())
- ThrowXMLwithMemMgr(MalformedURLException,
XMLExcepts::URL_MalformedURL, fMemoryManager);
- srcToFill = new (fMemoryManager) URLInputSource(urlTmp,
fMemoryManager);
- }
- }
- catch(const MalformedURLException& e)
- {
- // Its not a URL, so lets assume its a local file name if non-standard
uri is allowed
if (!fStandardUriConformant)
srcToFill = new (fMemoryManager) LocalFileInputSource
(
@@ -2480,8 +2463,14 @@
, fMemoryManager
);
else
- throw e;
+ ThrowXMLwithMemMgr(MalformedURLException,
XMLExcepts::URL_MalformedURL, fMemoryManager);
}
+ else
+ {
+ if (fStandardUriConformant && urlTmp.hasInvalidChar())
+ ThrowXMLwithMemMgr(MalformedURLException,
XMLExcepts::URL_MalformedURL, fMemoryManager);
+ srcToFill = new (fMemoryManager) URLInputSource(urlTmp, fMemoryManager);
+ }
}
return srcToFill;
1.58 +21 -44 xml-xerces/c/src/xercesc/internal/IGXMLScanner2.cpp
Index: IGXMLScanner2.cpp
===================================================================
RCS file: /home/cvs/xml-xerces/c/src/xercesc/internal/IGXMLScanner2.cpp,v
retrieving revision 1.57
retrieving revision 1.58
diff -u -r1.57 -r1.58
--- IGXMLScanner2.cpp 30 Dec 2003 21:38:42 -0000 1.57
+++ IGXMLScanner2.cpp 12 Jan 2004 16:15:57 -0000 1.58
@@ -1738,28 +1738,10 @@
ReaderMgr::LastExtEntityInfo lastInfo;
fReaderMgr.getLastExtEntityInfo(lastInfo);
- try
+ XMLURL urlTmp(fMemoryManager);
+ if ((!urlTmp.setURL(lastInfo.systemId, expSysId.getRawBuffer(),
urlTmp)) ||
+ (urlTmp.isRelative()))
{
- XMLURL urlTmp(lastInfo.systemId, expSysId.getRawBuffer(),
fMemoryManager);
- if (urlTmp.isRelative())
- {
- ThrowXMLwithMemMgr
- (
- MalformedURLException
- , XMLExcepts::URL_NoProtocolPresent
- , fMemoryManager
- );
- }
- else {
- if (fStandardUriConformant && urlTmp.hasInvalidChar())
- ThrowXMLwithMemMgr(MalformedURLException,
XMLExcepts::URL_MalformedURL, fMemoryManager);
- srcToFill = new (fMemoryManager) URLInputSource(urlTmp,
fMemoryManager);
- }
- }
-
- catch(const MalformedURLException& e)
- {
- // Its not a URL, so lets assume its a local file name if
non-standard uri is allowed
if (!fStandardUriConformant)
srcToFill = new (fMemoryManager) LocalFileInputSource
(
@@ -1768,8 +1750,14 @@
, fMemoryManager
);
else
- throw e;
+ ThrowXMLwithMemMgr(MalformedURLException,
XMLExcepts::URL_MalformedURL, fMemoryManager);
}
+ else
+ {
+ if (fStandardUriConformant && urlTmp.hasInvalidChar())
+ ThrowXMLwithMemMgr(MalformedURLException,
XMLExcepts::URL_MalformedURL, fMemoryManager);
+ srcToFill = new (fMemoryManager) URLInputSource(urlTmp,
fMemoryManager);
+ }
}
// Put a janitor on the input source
@@ -1920,27 +1908,10 @@
ReaderMgr::LastExtEntityInfo lastInfo;
fReaderMgr.getLastExtEntityInfo(lastInfo);
- try
+ XMLURL urlTmp(fMemoryManager);
+ if ((!urlTmp.setURL(lastInfo.systemId, expSysId.getRawBuffer(), urlTmp)) ||
+ (urlTmp.isRelative()))
{
- XMLURL urlTmp(lastInfo.systemId, expSysId.getRawBuffer());
- if (urlTmp.isRelative())
- {
- ThrowXMLwithMemMgr
- (
- MalformedURLException
- , XMLExcepts::URL_NoProtocolPresent
- , fMemoryManager
- );
- }
- else {
- if (fStandardUriConformant && urlTmp.hasInvalidChar())
- ThrowXMLwithMemMgr(MalformedURLException,
XMLExcepts::URL_MalformedURL, fMemoryManager);
- srcToFill = new (fMemoryManager) URLInputSource(urlTmp,
fMemoryManager);
- }
- }
- catch(const MalformedURLException& e)
- {
- // Its not a URL, so lets assume its a local file name if non-standard
uri is allowed
if (!fStandardUriConformant)
srcToFill = new (fMemoryManager) LocalFileInputSource
(
@@ -1949,8 +1920,14 @@
, fMemoryManager
);
else
- throw e;
+ ThrowXMLwithMemMgr(MalformedURLException,
XMLExcepts::URL_MalformedURL, fMemoryManager);
}
+ else
+ {
+ if (fStandardUriConformant && urlTmp.hasInvalidChar())
+ ThrowXMLwithMemMgr(MalformedURLException,
XMLExcepts::URL_MalformedURL, fMemoryManager);
+ srcToFill = new (fMemoryManager) URLInputSource(urlTmp, fMemoryManager);
+ }
}
return srcToFill;
1.21 +37 -24 xml-xerces/c/src/xercesc/internal/ReaderMgr.cpp
Index: ReaderMgr.cpp
===================================================================
RCS file: /home/cvs/xml-xerces/c/src/xercesc/internal/ReaderMgr.cpp,v
retrieving revision 1.20
retrieving revision 1.21
diff -u -r1.20 -r1.21
--- ReaderMgr.cpp 17 Dec 2003 00:18:34 -0000 1.20
+++ ReaderMgr.cpp 12 Jan 2004 16:15:57 -0000 1.21
@@ -544,6 +544,10 @@
LastExtEntityInfo lastInfo;
getLastExtEntityInfo(lastInfo);
+// Keep this #if 0 block as it was exposing a threading problem on AIX.
+// Got rid of the problem by changing XMLURL to not throw malformedurl
+// exceptions.
+#if 0
try
{
XMLURL urlTmp(lastInfo.systemId, expSysId.getRawBuffer(),
fMemoryManager);
@@ -576,6 +580,28 @@
else
throw e;
}
+#else
+ XMLURL urlTmp(fMemoryManager);
+ if ((!urlTmp.setURL(lastInfo.systemId, expSysId.getRawBuffer(), urlTmp)) ||
+ (urlTmp.isRelative()))
+ {
+ if (!fStandardUriConformant)
+ srcToFill = new (fMemoryManager) LocalFileInputSource
+ (
+ lastInfo.systemId
+ , expSysId.getRawBuffer()
+ , fMemoryManager
+ );
+ else
+ ThrowXMLwithMemMgr(MalformedURLException,
XMLExcepts::URL_MalformedURL, fMemoryManager);
+ }
+ else
+ {
+ if (fStandardUriConformant && urlTmp.hasInvalidChar())
+ ThrowXMLwithMemMgr(MalformedURLException,
XMLExcepts::URL_MalformedURL, fMemoryManager);
+ srcToFill = new (fMemoryManager) URLInputSource(urlTmp, fMemoryManager);
+ }
+#endif
}
// Put a janitor on the input source
@@ -653,29 +679,10 @@
LastExtEntityInfo lastInfo;
getLastExtEntityInfo(lastInfo);
- try
- {
- XMLURL urlTmp((!baseURI || !*baseURI) ? lastInfo.systemId : baseURI,
expSysId.getRawBuffer(), fMemoryManager);
-
- if (urlTmp.isRelative())
- {
- ThrowXMLwithMemMgr
- (
- MalformedURLException
- , XMLExcepts::URL_NoProtocolPresent
- , fMemoryManager
- );
- }
- else {
- if (fStandardUriConformant && urlTmp.hasInvalidChar())
- ThrowXMLwithMemMgr(MalformedURLException,
XMLExcepts::URL_MalformedURL, fMemoryManager);
- srcToFill = new (fMemoryManager) URLInputSource(urlTmp,
fMemoryManager);
- }
- }
-
- catch(const MalformedURLException& e)
+ XMLURL urlTmp(fMemoryManager);
+ if ((!urlTmp.setURL((!baseURI || !*baseURI) ? lastInfo.systemId : baseURI,
expSysId.getRawBuffer(), urlTmp)) ||
+ (urlTmp.isRelative()))
{
- // Its not a URL, so lets assume its a local file name if non-standard
uri is allowed
if (!fStandardUriConformant)
srcToFill = new (fMemoryManager) LocalFileInputSource
(
@@ -684,8 +691,14 @@
, fMemoryManager
);
else
- throw e;
+ ThrowXMLwithMemMgr(MalformedURLException,
XMLExcepts::URL_MalformedURL, fMemoryManager);
}
+ else
+ {
+ if (fStandardUriConformant && urlTmp.hasInvalidChar())
+ ThrowXMLwithMemMgr(MalformedURLException,
XMLExcepts::URL_MalformedURL, fMemoryManager);
+ srcToFill = new (fMemoryManager) URLInputSource(urlTmp, fMemoryManager);
+ }
}
// Put a janitor on the input source
1.74 +21 -44 xml-xerces/c/src/xercesc/internal/SGXMLScanner.cpp
Index: SGXMLScanner.cpp
===================================================================
RCS file: /home/cvs/xml-xerces/c/src/xercesc/internal/SGXMLScanner.cpp,v
retrieving revision 1.73
retrieving revision 1.74
diff -u -r1.73 -r1.74
--- SGXMLScanner.cpp 30 Dec 2003 17:50:52 -0000 1.73
+++ SGXMLScanner.cpp 12 Jan 2004 16:15:57 -0000 1.74
@@ -3769,28 +3769,10 @@
ReaderMgr::LastExtEntityInfo lastInfo;
fReaderMgr.getLastExtEntityInfo(lastInfo);
- try
+ XMLURL urlTmp(fMemoryManager);
+ if ((!urlTmp.setURL(lastInfo.systemId, expSysId.getRawBuffer(),
urlTmp)) ||
+ (urlTmp.isRelative()))
{
- XMLURL urlTmp(lastInfo.systemId, expSysId.getRawBuffer());
- if (urlTmp.isRelative())
- {
- ThrowXMLwithMemMgr
- (
- MalformedURLException
- , XMLExcepts::URL_NoProtocolPresent
- , fMemoryManager
- );
- }
- else {
- if (fStandardUriConformant && urlTmp.hasInvalidChar())
- ThrowXMLwithMemMgr(MalformedURLException,
XMLExcepts::URL_MalformedURL, fMemoryManager);
- srcToFill = new (fMemoryManager) URLInputSource(urlTmp,
fMemoryManager);
- }
- }
-
- catch(const MalformedURLException& e)
- {
- // Its not a URL, so lets assume its a local file name if
non-standard uri is allowed
if (!fStandardUriConformant)
srcToFill = new (fMemoryManager) LocalFileInputSource
(
@@ -3799,8 +3781,14 @@
, fMemoryManager
);
else
- throw e;
+ ThrowXMLwithMemMgr(MalformedURLException,
XMLExcepts::URL_MalformedURL, fMemoryManager);
}
+ else
+ {
+ if (fStandardUriConformant && urlTmp.hasInvalidChar())
+ ThrowXMLwithMemMgr(MalformedURLException,
XMLExcepts::URL_MalformedURL, fMemoryManager);
+ srcToFill = new (fMemoryManager) URLInputSource(urlTmp,
fMemoryManager);
+ }
}
// Put a janitor on the input source
@@ -3929,27 +3917,10 @@
ReaderMgr::LastExtEntityInfo lastInfo;
fReaderMgr.getLastExtEntityInfo(lastInfo);
- try
+ XMLURL urlTmp(fMemoryManager);
+ if ((!urlTmp.setURL(lastInfo.systemId, expSysId.getRawBuffer(), urlTmp)) ||
+ (urlTmp.isRelative()))
{
- XMLURL urlTmp(lastInfo.systemId, expSysId.getRawBuffer());
- if (urlTmp.isRelative())
- {
- ThrowXMLwithMemMgr
- (
- MalformedURLException
- , XMLExcepts::URL_NoProtocolPresent
- , fMemoryManager
- );
- }
- else {
- if (fStandardUriConformant && urlTmp.hasInvalidChar())
- ThrowXMLwithMemMgr(MalformedURLException,
XMLExcepts::URL_MalformedURL, fMemoryManager);
- srcToFill = new (fMemoryManager) URLInputSource(urlTmp,
fMemoryManager);
- }
- }
- catch(const MalformedURLException& e)
- {
- // Its not a URL, so lets assume its a local file name if non-standard
uri is allowed
if (!fStandardUriConformant)
srcToFill = new (fMemoryManager) LocalFileInputSource
(
@@ -3958,8 +3929,14 @@
, fMemoryManager
);
else
- throw e;
+ ThrowXMLwithMemMgr(MalformedURLException,
XMLExcepts::URL_MalformedURL, fMemoryManager);
}
+ else
+ {
+ if (fStandardUriConformant && urlTmp.hasInvalidChar())
+ ThrowXMLwithMemMgr(MalformedURLException,
XMLExcepts::URL_MalformedURL, fMemoryManager);
+ srcToFill = new (fMemoryManager) URLInputSource(urlTmp, fMemoryManager);
+ }
}
return srcToFill;
1.61 +81 -101 xml-xerces/c/src/xercesc/internal/XMLScanner.cpp
Index: XMLScanner.cpp
===================================================================
RCS file: /home/cvs/xml-xerces/c/src/xercesc/internal/XMLScanner.cpp,v
retrieving revision 1.60
retrieving revision 1.61
diff -u -r1.60 -r1.61
--- XMLScanner.cpp 9 Jan 2004 04:39:56 -0000 1.60
+++ XMLScanner.cpp 12 Jan 2004 16:15:57 -0000 1.61
@@ -433,15 +433,6 @@
);
return;
}
- catch(const OutOfMemoryException&)
- {
- throw;
- }
- catch(...)
- {
- // Just rethrow this, since its not our problem
- throw;
- }
Janitor<InputSource> janSrc(srcToUse);
scanDocument(*srcToUse);
@@ -472,28 +463,49 @@
// Create a temporary URL. Since this is the primary document,
// it has to be fully qualified. If not, then assume we are just
// mistaking a file for a URL.
- XMLURL tmpURL(systemId, fMemoryManager);
- if (tmpURL.isRelative()) {
+ XMLURL tmpURL(fMemoryManager);
+ if (XMLURL::parse(systemId, tmpURL)) {
+ if (tmpURL.isRelative()) {
+ if (!fStandardUriConformant)
+ srcToUse = new (fMemoryManager) LocalFileInputSource(systemId,
fMemoryManager);
+ else {
+ // since this is the top of the try/catch, cannot call
ThrowXMLwithMemMgr
+ // emit the error directly
+ MalformedURLException e(__FILE__, __LINE__,
XMLExcepts::URL_NoProtocolPresent, fMemoryManager);
+ fInException = true;
+ emitError
+ (
+ XMLErrs::XMLException_Fatal
+ , e.getType()
+ , e.getMessage()
+ );
+ return false;
+ }
+ }
+ else
+ {
+ if (fStandardUriConformant && tmpURL.hasInvalidChar()) {
+ MalformedURLException e(__FILE__, __LINE__,
XMLExcepts::URL_MalformedURL, fMemoryManager);
+ fInException = true;
+ emitError
+ (
+ XMLErrs::XMLException_Fatal
+ , e.getType()
+ , e.getMessage()
+ );
+ return false;
+ }
+ srcToUse = new (fMemoryManager) URLInputSource(tmpURL,
fMemoryManager);
+ }
+ }
+ else {
if (!fStandardUriConformant)
- srcToUse = new (fMemoryManager) LocalFileInputSource(systemId,
fMemoryManager);
+ srcToUse = new (fMemoryManager) LocalFileInputSource(systemId,
fMemoryManager);
else {
// since this is the top of the try/catch, cannot call
ThrowXMLwithMemMgr
// emit the error directly
- MalformedURLException e(__FILE__, __LINE__,
XMLExcepts::URL_NoProtocolPresent, fMemoryManager);
- fInException = true;
- emitError
- (
- XMLErrs::XMLException_Fatal
- , e.getType()
- , e.getMessage()
- );
- return false;
- }
- }
- else
- {
- if (fStandardUriConformant && tmpURL.hasInvalidChar()) {
- MalformedURLException e(__FILE__, __LINE__,
XMLExcepts::URL_MalformedURL, fMemoryManager);
+ // lazy bypass ... since all MalformedURLException are fatal, no
need to check the type
+ MalformedURLException e(__FILE__, __LINE__,
XMLExcepts::URL_MalformedURL);
fInException = true;
emitError
(
@@ -503,25 +515,6 @@
);
return false;
}
- srcToUse = new (fMemoryManager) URLInputSource(tmpURL, fMemoryManager);
- }
- }
- catch(const MalformedURLException& e)
- {
- if (!fStandardUriConformant)
- srcToUse = new (fMemoryManager) LocalFileInputSource(systemId,
fMemoryManager);
- else {
- // since this is the top of the try/catch, cannot call
ThrowXMLwithMemMgr
- // emit the error directly
- // lazy bypass ... since all MalformedURLException are fatal, no need
to check the type
- fInException = true;
- emitError
- (
- XMLErrs::XMLException_Fatal
- , e.getType()
- , e.getMessage()
- );
- return false;
}
}
catch(const XMLException& excToCatch)
@@ -552,15 +545,6 @@
);
return false;
}
- catch(const OutOfMemoryException&)
- {
- throw;
- }
- catch(...)
- {
- // Just rethrow this, since its not our problem
- throw;
- }
Janitor<InputSource> janSrc(srcToUse);
return scanFirst(*srcToUse, toFill);
@@ -1631,29 +1615,53 @@
// Create a temporary URL. Since this is the primary document,
// it has to be fully qualified. If not, then assume we are just
// mistaking a file for a URL.
- XMLURL tmpURL(systemId, fMemoryManager);
- if (tmpURL.isRelative())
+ XMLURL tmpURL(fMemoryManager);
+
+ if (XMLURL::parse(systemId, tmpURL)) {
+
+ if (tmpURL.isRelative())
+ {
+ if (!fStandardUriConformant)
+ srcToUse = new (fMemoryManager)
LocalFileInputSource(systemId, fMemoryManager);
+ else {
+ // since this is the top of the try/catch, cannot call
ThrowXMLwithMemMgr
+ // emit the error directly
+ MalformedURLException e(__FILE__, __LINE__,
XMLExcepts::URL_NoProtocolPresent, fMemoryManager);
+ fInException = true;
+ emitError
+ (
+ XMLErrs::XMLException_Fatal
+ , e.getType()
+ , e.getMessage()
+ );
+ return 0;
+ }
+ }
+ else
+ {
+ if (fStandardUriConformant && tmpURL.hasInvalidChar()) {
+ MalformedURLException e(__FILE__, __LINE__,
XMLExcepts::URL_MalformedURL, fMemoryManager);
+ fInException = true;
+ emitError
+ (
+ XMLErrs::XMLException_Fatal
+ , e.getType()
+ , e.getMessage()
+ );
+ return 0;
+ }
+ srcToUse = new (fMemoryManager) URLInputSource(tmpURL,
fMemoryManager);
+ }
+ }
+ else
{
if (!fStandardUriConformant)
srcToUse = new (fMemoryManager) LocalFileInputSource(systemId,
fMemoryManager);
else {
// since this is the top of the try/catch, cannot call
ThrowXMLwithMemMgr
// emit the error directly
- MalformedURLException e(__FILE__, __LINE__,
XMLExcepts::URL_NoProtocolPresent, fMemoryManager);
- fInException = true;
- emitError
- (
- XMLErrs::XMLException_Fatal
- , e.getType()
- , e.getMessage()
- );
- return 0;
- }
- }
- else
- {
- if (fStandardUriConformant && tmpURL.hasInvalidChar()) {
- MalformedURLException e(__FILE__, __LINE__,
XMLExcepts::URL_MalformedURL, fMemoryManager);
+ // lazy bypass ... since all MalformedURLException are fatal,
no need to check the type
+ MalformedURLException e(__FILE__, __LINE__,
XMLExcepts::URL_MalformedURL);
fInException = true;
emitError
(
@@ -1663,25 +1671,6 @@
);
return 0;
}
- srcToUse = new (fMemoryManager) URLInputSource(tmpURL,
fMemoryManager);
- }
- }
- catch(const MalformedURLException& e)
- {
- if (!fStandardUriConformant)
- srcToUse = new (fMemoryManager) LocalFileInputSource(systemId,
fMemoryManager);
- else {
- // since this is the top of the try/catch, cannot call
ThrowXMLwithMemMgr
- // emit the error directly
- // lazy bypass ... since all MalformedURLException are fatal, no
need to check the type
- fInException = true;
- emitError
- (
- XMLErrs::XMLException_Fatal
- , e.getType()
- , e.getMessage()
- );
- return 0;
}
}
catch(const XMLException& excToCatch)
@@ -1711,15 +1700,6 @@
, excToCatch.getMessage()
);
return 0;
- }
- catch(const OutOfMemoryException&)
- {
- throw;
- }
- catch(...)
- {
- // Just rethrow this, since its not our problem
- throw;
}
}
1.12 +33 -3 xml-xerces/c/src/xercesc/util/XMLURL.cpp
Index: XMLURL.cpp
===================================================================
RCS file: /home/cvs/xml-xerces/c/src/xercesc/util/XMLURL.cpp,v
retrieving revision 1.11
retrieving revision 1.12
diff -u -r1.11 -r1.12
--- XMLURL.cpp 17 Dec 2003 00:18:35 -0000 1.11
+++ XMLURL.cpp 12 Jan 2004 16:15:57 -0000 1.12
@@ -221,8 +221,8 @@
, fHasInvalidChar(false)
{
try
- {
- setURL(baseURL, relativeURL);
+ {
+ setURL(baseURL, relativeURL);
}
catch(const OutOfMemoryException&)
{
@@ -424,6 +424,7 @@
catch(...)
{
cleanup();
+ throw;
}
}
@@ -537,6 +538,35 @@
}
}
}
+}
+
+// this version of setURL doesn't throw a malformedurl exception
+// instead it returns false when it failed (or when it would of
+// thrown a malformedurl exception)
+bool XMLURL::setURL(const XMLCh* const baseURL
+ , const XMLCh* const relativeURL
+ , XMLURL& xmlURL)
+{
+ cleanup();
+
+ // Parse our URL string
+ if (parse(relativeURL, xmlURL))
+ {
+ // If its relative and the base is non-null and non-empty, then
+ // parse the base URL string and conglomerate them.
+ //
+ if (isRelative() && baseURL && *baseURL)
+ {
+ XMLURL basePart(fMemoryManager);
+ if (parse(baseURL, basePart) && conglomerateWithBase(basePart, false))
+ {
+ return true;
+ }
+ }
+ else
+ return true;
+ }
+ return false;
}
void XMLURL::setURL(const XMLURL& baseURL
1.12 +6 -3 xml-xerces/c/src/xercesc/util/XMLURL.hpp
Index: XMLURL.hpp
===================================================================
RCS file: /home/cvs/xml-xerces/c/src/xercesc/util/XMLURL.hpp,v
retrieving revision 1.11
retrieving revision 1.12
diff -u -r1.11 -r1.12
--- XMLURL.hpp 26 Aug 2003 21:05:32 -0000 1.11
+++ XMLURL.hpp 12 Jan 2004 16:15:57 -0000 1.12
@@ -175,8 +175,11 @@
const XMLURL& baseURL
, const XMLCh* const relativeURL
);
-
-
+ // a version of setURL that doesn't throw malformed url exceptions
+ bool setURL(
+ const XMLCh* const baseURL
+ , const XMLCh* const relativeURL
+ , XMLURL& xmlURL);
// -----------------------------------------------------------------------
// Miscellaneous methods
// -----------------------------------------------------------------------
1.107 +18 -21 xml-xerces/c/src/xercesc/validators/schema/TraverseSchema.cpp
Index: TraverseSchema.cpp
===================================================================
RCS file: /home/cvs/xml-xerces/c/src/xercesc/validators/schema/TraverseSchema.cpp,v
retrieving revision 1.106
retrieving revision 1.107
diff -u -r1.106 -r1.107
--- TraverseSchema.cpp 6 Jan 2004 03:55:26 -0000 1.106
+++ TraverseSchema.cpp 12 Jan 2004 16:15:57 -0000 1.107
@@ -6448,28 +6448,25 @@
// the update resolveEntity accepting nameSpace, a schemImport could
// pass a null schemaLocation)
if (!srcToFill && loc) {
-
- try {
-
- XMLURL urlTmp(fSchemaInfo->getCurrentSchemaURL(), normalizedURI,
fMemoryManager);
-
- if (urlTmp.isRelative()) {
- ThrowXMLwithMemMgr(MalformedURLException,
- XMLExcepts::URL_NoProtocolPresent, fMemoryManager);
- }
- else {
- if (fScanner->getStandardUriConformant() && urlTmp.hasInvalidChar())
- ThrowXMLwithMemMgr(MalformedURLException,
XMLExcepts::URL_MalformedURL, fMemoryManager);
- srcToFill = new (fMemoryManager) URLInputSource(urlTmp,
fMemoryManager);
- }
- }
- catch(const MalformedURLException& e) {
- // Its not a URL, so lets assume its a local file name if non-standard
URI is allowed
- if (!fScanner->getStandardUriConformant())
- srcToFill = new (fMemoryManager)
LocalFileInputSource(fSchemaInfo->getCurrentSchemaURL(),normalizedURI, fMemoryManager);
+ XMLURL urlTmp(fMemoryManager);
+ if ((!urlTmp.setURL(fSchemaInfo->getCurrentSchemaURL(), normalizedURI,
urlTmp)) ||
+ (urlTmp.isRelative()))
+ {
+ if (!fScanner->getStandardUriConformant())
+ srcToFill = new (fMemoryManager) LocalFileInputSource
+ ( fSchemaInfo->getCurrentSchemaURL()
+ , normalizedURI
+ , fMemoryManager
+ );
else
- throw e;
+ ThrowXMLwithMemMgr(MalformedURLException,
XMLExcepts::URL_MalformedURL, fMemoryManager);
}
+ else
+ {
+ if (fScanner->getStandardUriConformant() && urlTmp.hasInvalidChar())
+ ThrowXMLwithMemMgr(MalformedURLException,
XMLExcepts::URL_MalformedURL, fMemoryManager);
+ srcToFill = new (fMemoryManager) URLInputSource(urlTmp,
fMemoryManager);
+ }
}
return srcToFill;
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]