knoaman 2003/02/05 09:08:43
Modified: c/src/xercesc/internal DGXMLScanner.cpp IGXMLScanner2.cpp
SGXMLScanner.cpp
Log:
[Bug 16747] Parser loses ValidationScheme setting between parse attempts
Revision Changes Path
1.7 +3 -4 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.6
retrieving revision 1.7
diff -u -r1.6 -r1.7
--- DGXMLScanner.cpp 4 Feb 2003 21:21:19 -0000 1.6
+++ DGXMLScanner.cpp 5 Feb 2003 17:08:42 -0000 1.7
@@ -1998,9 +1998,8 @@
fRootGrammar = 0;
fValidator->setGrammar(fGrammar);
- if (fValScheme == Val_Auto) {
- fValidate = false;
- }
+ // Reset validation
+ fValidate = (fValScheme == Val_Always) ? true : false;
// And for all installed handlers, send reset events. This gives them
// a chance to flush any cached data.
1.13 +13 -14 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.12
retrieving revision 1.13
diff -u -r1.12 -r1.13
--- IGXMLScanner2.cpp 4 Feb 2003 21:21:50 -0000 1.12
+++ IGXMLScanner2.cpp 5 Feb 2003 17:08:42 -0000 1.13
@@ -281,7 +281,7 @@
//we may have set it to invalid already, but this is the first time
we are guarenteed to have the attDef
if(((SchemaAttDef *)(attDef))->getValidity() != PSVIDefs::INVALID)
((SchemaAttDef *)(attDef))->setValidity(PSVIDefs::VALID);
-
+
((SchemaAttDef *)(attDef))->setValidationAttempted(PSVIDefs::FULL);
}
@@ -292,7 +292,7 @@
attDef->setCreateReason(XMLAttDef::JustFaultIn);
}
- bool errorCondition = fValidate && !attDefForWildCard &&
+ bool errorCondition = fValidate && !attDefForWildCard &&
attDef->getCreateReason() == XMLAttDef::JustFaultIn &&
!attDef->getProvided();
if (errorCondition && !skipThisOne && !laxThisOne)
{
@@ -334,7 +334,7 @@
if (attDef->getProvided())
{
emitError
- (
+ (
XMLErrs::AttrAlreadyUsedInSTag
, attDef->getFullName()
, elemDecl->getFullName()
@@ -517,7 +517,7 @@
XMLValid::RequiredAttrNotProvided
, curDef->getFullName()
);
- if(fGrammarType == Grammar::SchemaGrammarType)
+ if(fGrammarType == Grammar::SchemaGrammarType)
((SchemaAttDef
*)(curDef))->setValidity(PSVIDefs::INVALID);
}
else if ((defType == XMLAttDef::Default) ||
@@ -527,7 +527,7 @@
{
// XML 1.0 Section 2.9
// Document is standalone, so attributes must not be
defaulted.
- fValidator->emitError(XMLValid::NoDefAttForStandalone,
curDef->getFullName(), elemDecl->getFullName());
+ fValidator->emitError(XMLValid::NoDefAttForStandalone,
curDef->getFullName(), elemDecl->getFullName());
if(fGrammarType == Grammar::SchemaGrammarType)
((SchemaAttDef
*)(curDef))->setValidity(PSVIDefs::INVALID);
}
@@ -883,9 +883,8 @@
fValidator->setGrammar(fGrammar);
}
- if (fValScheme == Val_Auto) {
- fValidate = false;
- }
+ // Reset validation
+ fValidate = (fValScheme == Val_Always) ? true : false;
// And for all installed handlers, send reset events. This gives them
// a chance to flush any cached data.
@@ -993,7 +992,7 @@
{
// They definitely cannot handle any type of char data
fValidator->emitError(XMLValid::NoCharDataInCM);
- if(fGrammarType == Grammar::SchemaGrammarType)
+ if(fGrammarType == Grammar::SchemaGrammarType)
((SchemaElementDecl
*)topElem->fThisElement)->setValidity(PSVIDefs::INVALID);
}
else if (fReaderMgr.getCurrentReader()->isAllSpaces(rawBuf, len))
@@ -1086,7 +1085,7 @@
else
{
fValidator->emitError(XMLValid::NoCharDataInCM);
- if(fGrammarType == Grammar::SchemaGrammarType)
+ if(fGrammarType == Grammar::SchemaGrammarType)
((SchemaElementDecl
*)topElem->fThisElement)->setValidity(PSVIDefs::INVALID);
}
}
@@ -1525,6 +1524,7 @@
fSchemaValidator->reset();
fSchemaValidator->setErrorReporter(fErrorReporter);
fSchemaValidator->setExitOnFirstFatal(fExitOnFirstFatal);
+ fSchemaValidator->setGrammarResolver(fGrammarResolver);
if (fValidatorFromUser)
fValidator->reset();
@@ -2008,7 +2008,6 @@
// This document is standalone; this ignorable CDATA whitespace is
forbidden.
// XML 1.0, Section 2.9
// And see if the current element is a 'Children' style content model
-
if (topElem->fThisElement->isExternal()) {
if (charOpts == XMLElementDecl::SpacesOk) // Element Content
@@ -2016,7 +2015,7 @@
// Error - standalone should have a value of "no" as whitespace
detected in an
// element type with element content whose element declaration
was external
fValidator->emitError(XMLValid::NoWSForStandalone);
- if(fGrammarType == Grammar::SchemaGrammarType)
+ if(fGrammarType == Grammar::SchemaGrammarType)
((SchemaElementDecl
*)topElem->fThisElement)->setValidity(PSVIDefs::INVALID);
}
}
@@ -2331,7 +2330,7 @@
// element type with element content whose element declaration
was external
//
fValidator->emitError(XMLValid::NoWSForStandalone);
- if(fGrammarType == Grammar::SchemaGrammarType)
+ if(fGrammarType == Grammar::SchemaGrammarType)
((SchemaElementDecl
*)fElemStack.topElement()->fThisElement)->setValidity(PSVIDefs::INVALID);
}
}
1.17 +16 -16 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.16
retrieving revision 1.17
diff -u -r1.16 -r1.17
--- SGXMLScanner.cpp 5 Feb 2003 09:10:10 -0000 1.16
+++ SGXMLScanner.cpp 5 Feb 2003 17:08:42 -0000 1.17
@@ -954,7 +954,7 @@
, topElem->fThisElement->getFormattedContentModel()
);
}
-
+
}
// call matchers and de-activate context
@@ -1206,7 +1206,7 @@
,uriStr
);
errorBeforeElementFound = true;
- }
+ }
else if(errorCondition)
laxBeforeElementFound = true;
@@ -1249,7 +1249,7 @@
);
errorBeforeElementFound = true;
}
- else if(errorCondition)
+ else if(errorCondition)
laxBeforeElementFound = true;
}
@@ -1294,10 +1294,10 @@
, XMLUni::fgZeroLenString
);
errorBeforeElementFound = true;
-
+
}
else if(errorCondition)
- laxBeforeElementFound = true;
+ laxBeforeElementFound = true;
elemDecl = fGrammar->getElemDecl
(
@@ -1333,7 +1333,7 @@
errorBeforeElementFound = true;
}
else if(errorCondition)
- laxBeforeElementFound = true;
+ laxBeforeElementFound = true;
elemDecl = fGrammar->getElemDecl
(
@@ -1411,9 +1411,9 @@
if (!elemDecl->isDeclared()) {
if (laxThisOne) {
fValidate = false;
- fElemStack.setValidationFlag(fValidate);
+ fElemStack.setValidationFlag(fValidate);
}
-
+
if (fValidate)
{
fValidator->emitError
@@ -2093,7 +2093,7 @@
//we may have set it to invalid already, but this is the first time
we are guarenteed to have the attDef
if(((SchemaAttDef *)(attDef))->getValidity() != PSVIDefs::INVALID)
((SchemaAttDef *)(attDef))->setValidity(PSVIDefs::VALID);
-
+
((SchemaAttDef *)(attDef))->setValidationAttempted(PSVIDefs::FULL);
}
@@ -2104,7 +2104,7 @@
attDef->setCreateReason(XMLAttDef::JustFaultIn);
}
- bool errorCondition = fValidate && !attDefForWildCard &&
+ bool errorCondition = fValidate && !attDefForWildCard &&
attDef->getCreateReason() == XMLAttDef::JustFaultIn &&
!attDef->getProvided();
if (errorCondition && !skipThisOne && !laxThisOne)
{
@@ -2381,7 +2381,7 @@
XMLValid::ProhibitedAttributePresent
, curDef->getFullName()
);
- ((SchemaAttDef *)curDef)->setValidity(PSVIDefs::INVALID);
+ ((SchemaAttDef *)curDef)->setValidity(PSVIDefs::INVALID);
}
((SchemaElementDecl
*)elemDecl)->updateValidityFromAttribute((SchemaAttDef *)curDef);
}
@@ -2460,7 +2460,7 @@
// Can't have a standalone document declaration of "yes"
if attribute
// values are subject to normalisation
fValidator->emitError(XMLValid::NoAttNormForStandalone,
attrName);
- ((SchemaAttDef *)attDef)->setValidity(PSVIDefs::INVALID);
+ ((SchemaAttDef *)attDef)->setValidity(PSVIDefs::INVALID);
}
nextCh = chSpace;
}
@@ -2654,9 +2654,8 @@
((SchemaValidator*) fValidator)->setExitOnFirstFatal(fExitOnFirstFatal);
}
- if (fValScheme == Val_Auto) {
- fValidate = false;
- }
+ // Reset validation
+ fValidate = (fValScheme == Val_Always) ? true : false;
// And for all installed handlers, send reset events. This gives them
// a chance to flush any cached data.
@@ -3248,6 +3247,7 @@
fSchemaValidator->reset();
fSchemaValidator->setErrorReporter(fErrorReporter);
fSchemaValidator->setExitOnFirstFatal(fExitOnFirstFatal);
+ fSchemaValidator->setGrammarResolver(fGrammarResolver);
if (fValidatorFromUser)
fValidator->reset();
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]