You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@xerces.apache.org by tn...@apache.org on 2003/01/03 21:08:40 UTC
cvs commit: xml-xerces/c/src/xercesc/internal DGXMLScanner.cpp IGXMLScanner2.cpp ReaderMgr.cpp ReaderMgr.hpp SGXMLScanner.cpp XMLScanner.cpp XMLScanner.hpp
tng 2003/01/03 12:08:40
Modified: c/src/xercesc/internal DGXMLScanner.cpp IGXMLScanner2.cpp
ReaderMgr.cpp ReaderMgr.hpp SGXMLScanner.cpp
XMLScanner.cpp XMLScanner.hpp
Log:
New feature StandardUriConformant to force strict standard uri conformance.
Revision Changes Path
1.4 +11 -8 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.3
retrieving revision 1.4
diff -u -r1.3 -r1.4
--- DGXMLScanner.cpp 24 Dec 2002 16:11:39 -0000 1.3
+++ DGXMLScanner.cpp 3 Jan 2003 20:08:39 -0000 1.4
@@ -2272,14 +2272,17 @@
}
srcToFill = new URLInputSource(urlTmp);
}
- catch(const MalformedURLException&)
+ catch(const MalformedURLException& e)
{
- // Its not a URL, so lets assume its a local file name.
- srcToFill = new LocalFileInputSource
- (
- lastInfo.systemId
- , expSysId.getRawBuffer()
- );
+ // Its not a URL, so lets assume its a local file name if non-standard uri is allowed
+ if (!fStandardUriConformant)
+ srcToFill = new LocalFileInputSource
+ (
+ lastInfo.systemId
+ , expSysId.getRawBuffer()
+ );
+ else
+ throw e;
}
}
1.6 +21 -15 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.5
retrieving revision 1.6
diff -u -r1.5 -r1.6
--- IGXMLScanner2.cpp 24 Dec 2002 16:11:39 -0000 1.5
+++ IGXMLScanner2.cpp 3 Jan 2003 20:08:39 -0000 1.6
@@ -1273,14 +1273,17 @@
srcToFill = new URLInputSource(urlTmp);
}
- catch(const MalformedURLException&)
+ catch(const MalformedURLException& e)
{
- // Its not a URL, so lets assume its a local file name.
- srcToFill = new LocalFileInputSource
- (
- lastInfo.systemId
- , expSysId.getRawBuffer()
- );
+ // Its not a URL, so lets assume its a local file name if non-standard uri is allowed
+ if (!fStandardUriConformant)
+ srcToFill = new LocalFileInputSource
+ (
+ lastInfo.systemId
+ , expSysId.getRawBuffer()
+ );
+ else
+ throw e;
}
}
@@ -1422,14 +1425,17 @@
}
srcToFill = new URLInputSource(urlTmp);
}
- catch(const MalformedURLException&)
+ catch(const MalformedURLException& e)
{
- // Its not a URL, so lets assume its a local file name.
- srcToFill = new LocalFileInputSource
- (
- lastInfo.systemId
- , expSysId.getRawBuffer()
- );
+ // Its not a URL, so lets assume its a local file name if non-standard uri is allowed
+ if (!fStandardUriConformant)
+ srcToFill = new LocalFileInputSource
+ (
+ lastInfo.systemId
+ , expSysId.getRawBuffer()
+ );
+ else
+ throw e;
}
}
1.10 +22 -15 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.9
retrieving revision 1.10
diff -u -r1.9 -r1.10
--- ReaderMgr.cpp 20 Dec 2002 22:09:56 -0000 1.9
+++ ReaderMgr.cpp 3 Jan 2003 20:08:39 -0000 1.10
@@ -94,6 +94,7 @@
, fReaderStack(0)
, fThrowEOE(false)
, fXMLVersion(XMLReader::XMLV1_0)
+ , fStandardUriConformant(false)
{
}
@@ -549,14 +550,17 @@
srcToFill = new URLInputSource(urlTmp);
}
- catch(const MalformedURLException&)
+ catch(const MalformedURLException& e)
{
- // Its not a URL, so lets assume its a local file name.
- srcToFill = new LocalFileInputSource
- (
- lastInfo.systemId
- , expSysId.getRawBuffer()
- );
+ // Its not a URL, so lets assume its a local file name if non-standard uri is allowed
+ if (!fStandardUriConformant)
+ srcToFill = new LocalFileInputSource
+ (
+ lastInfo.systemId
+ , expSysId.getRawBuffer()
+ );
+ else
+ throw e;
}
}
@@ -652,14 +656,17 @@
srcToFill = new URLInputSource(urlTmp);
}
- catch(const MalformedURLException&)
+ catch(const MalformedURLException& e)
{
- // Its not a URL, so lets assume its a local file name.
- srcToFill = new LocalFileInputSource
- (
- lastInfo.systemId
- , expSysId.getRawBuffer()
- );
+ // Its not a URL, so lets assume its a local file name if non-standard uri is allowed
+ if (!fStandardUriConformant)
+ srcToFill = new LocalFileInputSource
+ (
+ lastInfo.systemId
+ , expSysId.getRawBuffer()
+ );
+ else
+ throw e;
}
}
1.7 +13 -0 xml-xerces/c/src/xercesc/internal/ReaderMgr.hpp
Index: ReaderMgr.hpp
===================================================================
RCS file: /home/cvs/xml-xerces/c/src/xercesc/internal/ReaderMgr.hpp,v
retrieving revision 1.6
retrieving revision 1.7
diff -u -r1.6 -r1.7
--- ReaderMgr.hpp 20 Dec 2002 22:09:56 -0000 1.6
+++ ReaderMgr.hpp 3 Jan 2003 20:08:39 -0000 1.7
@@ -56,6 +56,9 @@
/*
* $Log$
+ * Revision 1.7 2003/01/03 20:08:39 tng
+ * New feature StandardUriConformant to force strict standard uri conformance.
+ *
* Revision 1.6 2002/12/20 22:09:56 tng
* XML 1.1
*
@@ -289,6 +292,7 @@
void setEntityHandler(XMLEntityHandler* const newHandler);
void setThrowEOE(const bool newValue);
void setXMLVersion(const XMLReader::XMLVersion version);
+ void setStandardUriConformant(const bool newValue);
// -----------------------------------------------------------------------
// Implement the SAX Locator interface
@@ -347,6 +351,9 @@
// fXMLVersion
// Enum to indicate if each Reader should be created as XML 1.1 or
// XML 1.0 conformant
+ //
+ // fStandardUriConformant
+ // This flag controls whether we force conformant URI
// -----------------------------------------------------------------------
XMLEntityDecl* fCurEntity;
XMLReader* fCurReader;
@@ -356,6 +363,7 @@
RefStackOf<XMLReader>* fReaderStack;
bool fThrowEOE;
XMLReader::XMLVersion fXMLVersion;
+ bool fStandardUriConformant;
};
@@ -418,6 +426,11 @@
inline void ReaderMgr::setThrowEOE(const bool newValue)
{
fThrowEOE = newValue;
+}
+
+inline void ReaderMgr::setStandardUriConformant(const bool newValue)
+{
+ fStandardUriConformant = newValue;
}
inline bool ReaderMgr::skippedString(const XMLCh* const toSkip)
1.6 +21 -15 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.5
retrieving revision 1.6
diff -u -r1.5 -r1.6
--- SGXMLScanner.cpp 24 Dec 2002 16:11:39 -0000 1.5
+++ SGXMLScanner.cpp 3 Jan 2003 20:08:39 -0000 1.6
@@ -2986,14 +2986,17 @@
srcToFill = new URLInputSource(urlTmp);
}
- catch(const MalformedURLException&)
+ catch(const MalformedURLException& e)
{
- // Its not a URL, so lets assume its a local file name.
- srcToFill = new LocalFileInputSource
- (
- lastInfo.systemId
- , expSysId.getRawBuffer()
- );
+ // Its not a URL, so lets assume its a local file name if non-standard uri is allowed
+ if (!fStandardUriConformant)
+ srcToFill = new LocalFileInputSource
+ (
+ lastInfo.systemId
+ , expSysId.getRawBuffer()
+ );
+ else
+ throw e;
}
}
@@ -3112,14 +3115,17 @@
}
srcToFill = new URLInputSource(urlTmp);
}
- catch(const MalformedURLException&)
+ catch(const MalformedURLException& e)
{
- // Its not a URL, so lets assume its a local file name.
- srcToFill = new LocalFileInputSource
- (
- lastInfo.systemId
- , expSysId.getRawBuffer()
- );
+ // Its not a URL, so lets assume its a local file name if non-standard uri is allowed
+ if (!fStandardUriConformant)
+ srcToFill = new LocalFileInputSource
+ (
+ lastInfo.systemId
+ , expSysId.getRawBuffer()
+ );
+ else
+ throw e;
}
}
1.35 +125 -10 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.34
retrieving revision 1.35
diff -u -r1.34 -r1.35
--- XMLScanner.cpp 30 Dec 2002 20:15:51 -0000 1.34
+++ XMLScanner.cpp 3 Jan 2003 20:08:39 -0000 1.35
@@ -189,6 +189,7 @@
, fRootElemName(0)
, fExternalSchemaLocation(0)
, fExternalNoNamespaceSchemaLocation(0)
+ , fStandardUriConformant(false)
{
commonInit();
@@ -243,6 +244,7 @@
, fRootElemName(0)
, fExternalSchemaLocation(0)
, fExternalNoNamespaceSchemaLocation(0)
+ , fStandardUriConformant(false)
{
commonInit();
@@ -288,7 +290,21 @@
// mistaking a file for a URL.
XMLURL tmpURL(systemId);
if (tmpURL.isRelative()) {
- srcToUse = new LocalFileInputSource(systemId);
+ if (!fStandardUriConformant)
+ srcToUse = new LocalFileInputSource(systemId);
+ else {
+ // since this is the top of the try/catch, cannot call ThrowXML
+ // emit the error directly
+ MalformedURLException e(__FILE__, __LINE__, XMLExcepts::URL_NoProtocolPresent);
+ fInException = true;
+ emitError
+ (
+ XMLErrs::XMLException_Fatal
+ , e.getType()
+ , e.getMessage()
+ );
+ return;
+ }
}
else
{
@@ -296,9 +312,23 @@
}
}
- catch(const MalformedURLException&)
+ catch(const MalformedURLException& e)
{
- srcToUse = new LocalFileInputSource(systemId);
+ if (!fStandardUriConformant)
+ srcToUse = new LocalFileInputSource(systemId);
+ else {
+ // since this is the top of the try/catch, cannot call ThrowXML
+ // 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;
+ }
}
catch(const XMLException& excToCatch)
@@ -366,16 +396,44 @@
// mistaking a file for a URL.
XMLURL tmpURL(systemId);
if (tmpURL.isRelative()) {
- srcToUse = new LocalFileInputSource(systemId);
+ if (!fStandardUriConformant)
+ srcToUse = new LocalFileInputSource(systemId);
+ else {
+ // since this is the top of the try/catch, cannot call ThrowXML
+ // emit the error directly
+ MalformedURLException e(__FILE__, __LINE__, XMLExcepts::URL_NoProtocolPresent);
+ fInException = true;
+ emitError
+ (
+ XMLErrs::XMLException_Fatal
+ , e.getType()
+ , e.getMessage()
+ );
+ return false;
+ }
}
else
{
srcToUse = new URLInputSource(tmpURL);
}
}
- catch(const MalformedURLException&)
+ catch(const MalformedURLException& e)
{
- srcToUse = new LocalFileInputSource(systemId);
+ if (!fStandardUriConformant)
+ srcToUse = new LocalFileInputSource(systemId);
+ else {
+ // since this is the top of the try/catch, cannot call ThrowXML
+ // 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)
{
@@ -550,6 +608,7 @@
setDoNamespaces(refScanner->getDoNamespaces());
setDoSchema(refScanner->getDoSchema());
setCalculateSrcOfs(refScanner->getCalculateSrcOfs());
+ setStandardUriConformant(refScanner->getStandardUriConformant());
setExitOnFirstFatal(refScanner->getExitOnFirstFatal());
setValidationConstraintFatal(refScanner->getValidationConstraintFatal());
setValidationSchemaFullChecking(refScanner->getValidationSchemaFullChecking());
@@ -1458,16 +1517,72 @@
XMLURL tmpURL(systemId);
if (tmpURL.isRelative())
{
- srcToUse = new LocalFileInputSource(systemId);
+ if (!fStandardUriConformant)
+ srcToUse = new LocalFileInputSource(systemId);
+ else {
+ // since this is the top of the try/catch, cannot call ThrowXML
+ // emit the error directly
+ MalformedURLException e(__FILE__, __LINE__, XMLExcepts::URL_NoProtocolPresent);
+ fInException = true;
+ emitError
+ (
+ XMLErrs::XMLException_Fatal
+ , e.getType()
+ , e.getMessage()
+ );
+ return 0;
+ }
}
else
{
srcToUse = new URLInputSource(tmpURL);
}
}
- catch(const MalformedURLException&)
+ catch(const MalformedURLException& e)
{
- srcToUse = new LocalFileInputSource(systemId);
+ if (!fStandardUriConformant)
+ srcToUse = new LocalFileInputSource(systemId);
+ else {
+ // since this is the top of the try/catch, cannot call ThrowXML
+ // 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)
+ {
+ // For any other XMLException,
+ // emit the error and catch any user exception thrown from here.
+ fInException = true;
+ if (excToCatch.getErrorType() == XMLErrorReporter::ErrType_Warning)
+ emitError
+ (
+ XMLErrs::XMLException_Warning
+ , excToCatch.getType()
+ , excToCatch.getMessage()
+ );
+ else if (excToCatch.getErrorType() >= XMLErrorReporter::ErrType_Fatal)
+ emitError
+ (
+ XMLErrs::XMLException_Fatal
+ , excToCatch.getType()
+ , excToCatch.getMessage()
+ );
+ else
+ emitError
+ (
+ XMLErrs::XMLException_Error
+ , excToCatch.getType()
+ , excToCatch.getMessage()
+ );
+ return 0;
}
catch(...)
{
1.16 +25 -1 xml-xerces/c/src/xercesc/internal/XMLScanner.hpp
Index: XMLScanner.hpp
===================================================================
RCS file: /home/cvs/xml-xerces/c/src/xercesc/internal/XMLScanner.hpp,v
retrieving revision 1.15
retrieving revision 1.16
diff -u -r1.15 -r1.16
--- XMLScanner.hpp 27 Dec 2002 16:16:51 -0000 1.15
+++ XMLScanner.hpp 3 Jan 2003 20:08:40 -0000 1.16
@@ -56,6 +56,9 @@
/*
* $Log$
+ * Revision 1.16 2003/01/03 20:08:40 tng
+ * New feature StandardUriConformant to force strict standard uri conformance.
+ *
* Revision 1.15 2002/12/27 16:16:51 knoaman
* Set scanner options and handlers.
*
@@ -503,6 +506,8 @@
/* tell if the validator comes from user */
bool isValidatorFromUser();
+ /* tell if standard URI are forced */
+ bool getStandardUriConformant() const;
// -----------------------------------------------------------------------
// Setter methods
@@ -533,6 +538,7 @@
void setNormalizeData(const bool normalizeData);
void setCalculateSrcOfs(const bool newValue);
void setParseSettings(XMLScanner* const refScanner);
+ void setStandardUriConformant(const bool newValue);
// -----------------------------------------------------------------------
// Mutator methods
@@ -583,7 +589,7 @@
// -----------------------------------------------------------------------
// Grammar preparsing methods
- // -----------------------------------------------------------------------
+ // -----------------------------------------------------------------------
Grammar* loadGrammar
(
const XMLCh* const systemId
@@ -819,7 +825,14 @@
// This flag indicates whether the parser should perform datatype
// normalization that is defined in the schema.
//
+ // fCalculateSrcOfs
+ // This flag indicates the parser should calculate the source offset.
+ // Turning this on may impact performance.
+ //
+ // fStandardUriConformant
+ // This flag controls whether we force conformant URI
// -----------------------------------------------------------------------
+ bool fStandardUriConformant;
bool fCalculateSrcOfs;
bool fDoNamespaces;
bool fExitOnFirstFatal;
@@ -1105,6 +1118,11 @@
return fRootGrammar;
}
+inline bool XMLScanner::getStandardUriConformant() const
+{
+ return fStandardUriConformant;
+}
+
// ---------------------------------------------------------------------------
// XMLScanner: Setter methods
// ---------------------------------------------------------------------------
@@ -1235,6 +1253,12 @@
inline void XMLScanner::setCalculateSrcOfs(const bool newValue)
{
fCalculateSrcOfs = newValue;
+}
+
+inline void XMLScanner::setStandardUriConformant(const bool newValue)
+{
+ fStandardUriConformant = newValue;
+ fReaderMgr.setStandardUriConformant(newValue);
}
// ---------------------------------------------------------------------------
---------------------------------------------------------------------
To unsubscribe, e-mail: xerces-cvs-unsubscribe@xml.apache.org
For additional commands, e-mail: xerces-cvs-help@xml.apache.org