Hacktoberfest 2026: những issue maintainer đã đánh dấu cho tháng Mười, đang mở và phù hợp người mới. Xem issue Hacktoberfest

Draft 2019-09 unevaluatedItems crashes when items is a boolean schema

Đang mở
#1,590 0 bình luận 0 reaction 0 người được giao Xem trên GitHub

Chưa có ai nhận issue này.

Đánh giá

Độ khó
3/5
Thời gian dự kiến
1-2 ngày
Mức phù hợp với người mới
55/100
Loại issue
Lỗi
Độ rõ ràng
Đặc tả rõ ràng
Mức độ hoạt động
Sôi nổi
Công nghệ
python
Lĩnh vực
backend, testing

Hướng nghiên cứu

The report identifies jsonschema/_legacy_keywords.py and the find_evaluated_item_indexes_by_schema helper; start by reading that helper alongside the items_draft6_draft7_draft201909 dispatch. Reproduce with the supplied schema and check the regression cases described for boolean items, combinators, and $ref. Done means boolean schemas no longer crash and the reported validation behavior is covered by passing tests.

Do mô hình lập chỉ mục viết ra từ nội dung của issue.

Mô tả

Draft201909Validator raises TypeError: object of type 'bool' has no len() when a boolean items schema is combined with unevaluatedItems, even when the instance is an empty array.

Reproduced with released jsonschema 4.26.0 on CPython 3.14.4 and with current main at c497561ea0a95f5aac09cd63d15eb1420eb7bbec.

from jsonschema import Draft201909Validator

schema = {"items": True, "unevaluatedItems": False}
Draft201909Validator.check_schema(schema)  # succeeds
print(list(Draft201909Validator(schema).iter_errors([1, 2])))

Expected: [], because items: true evaluates every item successfully.

Actual:

  File "jsonschema/_legacy_keywords.py", in find_evaluated_item_indexes_by_schema
    evaluated_indexes += list(range(len(schema["items"])))
TypeError: object of type 'bool' has no len()

The same crash occurs with items: false. An empty array should be valid in that case; a nonempty array should produce ordinary validation errors. Replacing the boolean items schema with an object schema avoids the crash.

Draft 2019-09 §9.3.1.1 permits a single schema or an array of schemas for items. Boolean schemas are valid single schemas. §9.3.1.3 describes how unevaluatedItems consumes the resulting annotations.

The evaluated-item helper recognizes an object as a single schema, but treats any other value as an array and calls len() on it. A local fix changes that condition to not validator.is_type(schema["items"], "array"), matching the dispatch already used by items_draft6_draft7_draft201909.

The local patch includes regressions for both booleans, nonempty-array rejection with items: false, allOf/anyOf/oneOf, and $ref. Before the fix, the four new test methods produced 12 TypeErrors. After the fix, the full 8,533-test discovery run exited successfully; the 29-test Draft 2019-09 validator class, lint, formatting, and typing checks also pass. An independent automated reviewer ran the 8,016-test official JSON Schema suite successfully (232 skipped).

I searched open and closed issues and PRs for unevaluatedItems, boolean items, and this exception. #867 concerns a boolean instance and a different exception; I did not find a report of this boolean-schema case.

The repository currently restricts PR creation to collaborators, so no PR has been opened. The tested patch is retained locally pending maintainer direction.

AI disclosure: this report, reproduction, local fix, and regression tests were prepared using OpenAI Codex, with independent review by a separate native GPT-6 Sol agent. This is automated work and still needs maintainer review.

Ngôn ngữ chính
Python
Star
5k
Fork
700
Merge trung bình
2 ngày 1 giờ
Pull request đã merge (30 ngày)
5

Chuẩn bị môi trường

Bắt đầu từ đâu

  1. Đọc hết issue, rồi đọc hướng dẫn đóng góp của dự án.
  2. Bình luận trên issue rằng bạn sẽ nhận — tránh hai người làm cùng một việc.
  3. Fork repository và làm thay đổi trên một nhánh.
  4. Mở pull request có tham chiếu số hiệu của issue.

Issue khác của python-jsonschema/jsonschema

Tất cả issue của python-jsonschema/jsonschema

Issue tương tự

Thêm issue về Python

Nhận issue mới trong hộp thư của bạn

Bản tóm tắt ngắn những issue GitHub phù hợp với người mới.