@@ -733,6 +733,7 @@ class Schema {
733
733
}
734
734
735
735
RAPIDJSON_FORCEINLINE bool EndValue (Context& context) const {
736
+ // Only check pattern properties if we have validators
736
737
if (context.patternPropertiesValidatorCount > 0 ) {
737
738
bool otherValid = false ;
738
739
SizeType count = context.patternPropertiesValidatorCount ;
@@ -775,41 +776,44 @@ class Schema {
775
776
foundEnum:;
776
777
}
777
778
778
- if (allOf_.schemas )
779
- for (SizeType i = allOf_.begin ; i < allOf_.begin + allOf_.count ; i++)
780
- if (!context.validators [i]->IsValid ()) {
781
- context.error_handler .NotAllOf (&context.validators [allOf_.begin ], allOf_.count );
782
- RAPIDJSON_INVALID_KEYWORD_RETURN (kValidateErrorAllOf );
783
- }
784
-
785
- if (anyOf_.schemas ) {
786
- for (SizeType i = anyOf_.begin ; i < anyOf_.begin + anyOf_.count ; i++)
787
- if (context.validators [i]->IsValid ())
788
- goto foundAny;
789
- context.error_handler .NoneOf (&context.validators [anyOf_.begin ], anyOf_.count );
790
- RAPIDJSON_INVALID_KEYWORD_RETURN (kValidateErrorAnyOf );
791
- foundAny:;
792
- }
793
-
794
- if (oneOf_.schemas ) {
795
- bool oneValid = false ;
796
- for (SizeType i = oneOf_.begin ; i < oneOf_.begin + oneOf_.count ; i++)
797
- if (context.validators [i]->IsValid ()) {
798
- if (oneValid) {
799
- context.error_handler .NotOneOf (&context.validators [oneOf_.begin ], oneOf_.count , true );
800
- RAPIDJSON_INVALID_KEYWORD_RETURN (kValidateErrorOneOfMatch );
801
- } else
802
- oneValid = true ;
779
+ // Only check allOf etc if we have validators
780
+ if (context.validatorCount > 0 ) {
781
+ if (allOf_.schemas )
782
+ for (SizeType i = allOf_.begin ; i < allOf_.begin + allOf_.count ; i++)
783
+ if (!context.validators [i]->IsValid ()) {
784
+ context.error_handler .NotAllOf (&context.validators [allOf_.begin ], allOf_.count );
785
+ RAPIDJSON_INVALID_KEYWORD_RETURN (kValidateErrorAllOf );
786
+ }
787
+
788
+ if (anyOf_.schemas ) {
789
+ for (SizeType i = anyOf_.begin ; i < anyOf_.begin + anyOf_.count ; i++)
790
+ if (context.validators [i]->IsValid ())
791
+ goto foundAny;
792
+ context.error_handler .NoneOf (&context.validators [anyOf_.begin ], anyOf_.count );
793
+ RAPIDJSON_INVALID_KEYWORD_RETURN (kValidateErrorAnyOf );
794
+ foundAny:;
795
+ }
796
+
797
+ if (oneOf_.schemas ) {
798
+ bool oneValid = false ;
799
+ for (SizeType i = oneOf_.begin ; i < oneOf_.begin + oneOf_.count ; i++)
800
+ if (context.validators [i]->IsValid ()) {
801
+ if (oneValid) {
802
+ context.error_handler .NotOneOf (&context.validators [oneOf_.begin ], oneOf_.count , true );
803
+ RAPIDJSON_INVALID_KEYWORD_RETURN (kValidateErrorOneOfMatch );
804
+ } else
805
+ oneValid = true ;
806
+ }
807
+ if (!oneValid) {
808
+ context.error_handler .NotOneOf (&context.validators [oneOf_.begin ], oneOf_.count , false );
809
+ RAPIDJSON_INVALID_KEYWORD_RETURN (kValidateErrorOneOf );
803
810
}
804
- if (!oneValid) {
805
- context.error_handler .NotOneOf (&context.validators [oneOf_.begin ], oneOf_.count , false );
806
- RAPIDJSON_INVALID_KEYWORD_RETURN (kValidateErrorOneOf );
807
811
}
808
- }
809
812
810
- if (not_ && context.validators [notValidatorIndex_]->IsValid ()) {
811
- context.error_handler .Disallowed ();
812
- RAPIDJSON_INVALID_KEYWORD_RETURN (kValidateErrorNot );
813
+ if (not_ && context.validators [notValidatorIndex_]->IsValid ()) {
814
+ context.error_handler .Disallowed ();
815
+ RAPIDJSON_INVALID_KEYWORD_RETURN (kValidateErrorNot );
816
+ }
813
817
}
814
818
815
819
return true ;
0 commit comments