Open
Conversation
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
What issue does this pull request resolve?
Fixes #2579.
When
oneOfis combined withunevaluatedProperties: false, Ajv previously merged evaluation results only from the subschema that validated.According to Draft 2020-12 §6.5.3.2.2, instance locations processed by an applicator should be considered evaluated regardless of whether that subschema ultimately succeeds.
Because of this, properties handled in failing branches could later be rejected as unevaluated.
What changes did you make?
The
oneOfvalidity rule (exactly one subschema must pass) is unchanged.This PR updates evaluation propagation so that information from processed subschemas is not lost.
For failing branches, only statically known evaluated properties/items are merged.
Dynamic or universal evaluations (e.g. represented by
Nameortrue) remain gated onschValid, preserving Ajv’s existing scoping expectations and preventing leakage from branches that do not contribute to the result.I also added a regression test covering the reported scenario.
Is there anything that requires more attention while reviewing?
Evaluation propagation around composite keywords is subtle, especially with dynamic references.
I verified locally that: