diff --git a/src/xercesc/validators/schema/TraverseSchema.cpp b/src/xercesc/validators/schema/TraverseSchema.cpp index a9dcd3ce194d0d6d949fa9018259ba77ccf8330c..0df08ccbc8bdfe72eb0cee0ec9c1577a9c3cf07d 100644 --- a/src/xercesc/validators/schema/TraverseSchema.cpp +++ b/src/xercesc/validators/schema/TraverseSchema.cpp @@ -8413,9 +8413,18 @@ TraverseSchema::checkTypesOK(const SchemaElementDecl* const derivedElemDecl, } } - for (; rInfo && rInfo != bInfo; rInfo = rInfo->getBaseComplexTypeInfo()); + if (rInfo == bInfo) + return; + + for (; rInfo && rInfo != bInfo; rInfo = rInfo->getBaseComplexTypeInfo()) { + if (rInfo->getDerivedBy() != SchemaSymbols::RESTRICTION) { + + rInfo = 0; + break; + } + } - if (rInfo == 0 || rInfo->getDerivedBy() != SchemaSymbols::RESTRICTION) { + if (!rInfo) { ThrowXML1(RuntimeException, XMLExcepts::PD_NameTypeOK5, derivedElemName); } }