Skip to content

Commit 9a4a4ef

Browse files
committed
Fix additionalItems behavior when items is not in tuple form.
1 parent 01de645 commit 9a4a4ef

File tree

2 files changed

+10
-3
lines changed

2 files changed

+10
-3
lines changed

jsonschema.py

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -447,6 +447,8 @@ def validate_items(self, items, instance, schema):
447447
def validate_additionalItems(self, aI, instance, schema):
448448
if not self.is_type(instance, "array"):
449449
return
450+
if not self.is_type(schema.get("items"), "array"):
451+
return
450452

451453
if self.is_type(aI, "object"):
452454
for item in instance[len(schema):]:
@@ -455,7 +457,7 @@ def validate_additionalItems(self, aI, instance, schema):
455457
elif not aI and len(instance) > len(schema.get("items", [])):
456458
error = "Additional items are not allowed (%s %s unexpected)"
457459
yield ValidationError(
458-
error % _extras_msg(instance[len(schema) - 1:])
460+
error % _extras_msg(instance[len(schema.get("items", [])):])
459461
)
460462

461463
def validate_minimum(self, minimum, instance, schema):

tests.py

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -320,6 +320,9 @@ def test_additionalItems_allowed_by_default(self):
320320
def test_additionalItems_ignores_nonarrays(self):
321321
validate(None, {"additionalItems" : False})
322322

323+
def test_additionalItems_ignored_when_items_is_not_tuple(self):
324+
validate([1, 2], {"additionalItems" : False})
325+
323326
@parametrized(
324327
("false_by_default", "valid", {}, {}),
325328
("false_explicit", "valid", {"required" : False}, {}),
@@ -676,11 +679,13 @@ def test_dependencies_failure_has_single_element_not_list(self):
676679
self.assertEqual(message, "%r is a dependency of %r" % (on, depend))
677680

678681
def test_additionalItems_single_failure(self):
679-
message = self.message_for([2], {"additionalItems" : False})
682+
message = self.message_for([2],
683+
{"items" : [], "additionalItems" : False})
680684
self.assertIn("(2 was unexpected)", message)
681685

682686
def test_additionalItems_multiple_failures(self):
683-
message = self.message_for([1, 2, 3], {"additionalItems" : False})
687+
message = self.message_for([1, 2, 3],
688+
{"items" : [], "additionalItems" : False})
684689
self.assertIn("(1, 2, 3 were unexpected)", message)
685690

686691
def test_additionalProperties_single_failure(self):

0 commit comments

Comments
 (0)