Skip to content

Commit

Permalink
Fix an additional unintentional resolution scope change in RefResolver
Browse files Browse the repository at this point in the history
Closes: #1085
  • Loading branch information
Julian committed Apr 27, 2023
1 parent cd88c1d commit 16fef5b
Show file tree
Hide file tree
Showing 2 changed files with 18 additions and 8 deletions.
11 changes: 9 additions & 2 deletions jsonschema/tests/test_validators.py
Original file line number Diff line number Diff line change
Expand Up @@ -2333,8 +2333,15 @@ def test_pointer_within_schema_with_different_id(self):
See #1085.
"""
schema = validators.Draft7Validator.META_SCHEMA
resolver = validators._RefResolver("", schema)
validator = validators.Draft7Validator(schema, resolver=resolver)
one = validators._RefResolver("", schema)
validator = validators.Draft7Validator(schema, resolver=one)
self.assertFalse(validator.is_valid({"maxLength": "foo"}))

another = {
"allOf": [{"$ref": validators.Draft7Validator.META_SCHEMA["$id"]}],
}
two = validators._RefResolver("", another)
validator = validators.Draft7Validator(another, resolver=two)
self.assertFalse(validator.is_valid({"maxLength": "foo"}))


Expand Down
15 changes: 9 additions & 6 deletions jsonschema/validators.py
Original file line number Diff line number Diff line change
Expand Up @@ -387,11 +387,14 @@ def descend(
)
return

if resolver is None:
resolver = self._resolver.in_subresource(
specification.create_resource(schema),
)
evolved = self.evolve(schema=schema, _resolver=resolver)
if self._ref_resolver is not None:
evolved = self.evolve(schema=schema)
else:
if resolver is None:
resolver = self._resolver.in_subresource(
specification.create_resource(schema),
)
evolved = self.evolve(schema=schema, _resolver=resolver)

for k, v in applicable_validators(schema):
validator = evolved.VALIDATORS.get(k)
Expand Down Expand Up @@ -448,7 +451,7 @@ def _validate_reference(self, ref, instance):
self._ref_resolver.push_scope(scope)

try:
return self.descend(instance, resolved)
return list(self.descend(instance, resolved))
finally:
self._ref_resolver.pop_scope()

Expand Down

0 comments on commit 16fef5b

Please sign in to comment.