Skip to content

Commit 292a256

Browse files
committed
Merge pull request #123 from gazpachoking/error_index_fix
Fix error paths when additionalItems is used with items keyword
2 parents 55af59e + d60b7b4 commit 292a256

File tree

2 files changed

+19
-1
lines changed

2 files changed

+19
-1
lines changed

jsonschema/_validators.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -59,8 +59,9 @@ def additionalItems(validator, aI, instance, schema):
5959
):
6060
return
6161

62+
len_items = len(schema.get("items", []))
6263
if validator.is_type(aI, "object"):
63-
for index, item in enumerate(instance[len(schema.get("items", [])):]):
64+
for index, item in enumerate(instance[len_items:], start=len_items):
6465
for error in validator.descend(item, aI, path=index):
6566
yield error
6667
elif not aI and len(instance) > len(schema.get("items", [])):

jsonschema/tests/test_validators.py

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -500,6 +500,23 @@ def test_additionalItems(self):
500500
self.assertEqual(e1.validator, "type")
501501
self.assertEqual(e2.validator, "minimum")
502502

503+
def test_additionalItems_with_items(self):
504+
instance = ["foo", "bar", 1]
505+
schema = {
506+
"items": [{}],
507+
"additionalItems" : {"type": "integer", "minimum": 5}
508+
}
509+
510+
validator = Draft3Validator(schema)
511+
errors = validator.iter_errors(instance)
512+
e1, e2 = sorted_errors(errors)
513+
514+
self.assertEqual(list(e1.path), [1])
515+
self.assertEqual(list(e2.path), [2])
516+
517+
self.assertEqual(e1.validator, "type")
518+
self.assertEqual(e2.validator, "minimum")
519+
503520

504521
class TestErrorTree(unittest.TestCase):
505522
def setUp(self):

0 commit comments

Comments
 (0)