Draft 2019-09 unevaluatedItems crashes when items is a boolean schema
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
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
- Không có Dockerfile hay tệp Docker Compose
- Không có mẫu pull request
- Đọc hướng dẫn đóng góp
Bắt đầu từ đâu
- Đọc hết issue, rồi đọc hướng dẫn đóng góp của dự án.
- 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.
- Fork repository và làm thay đổi trên một nhánh.
- Mở pull request có tham chiếu số hiệu của issue.
Issue khác của python-jsonschema/jsonschema
-
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 65/100
python-jsonschema/jsonschema#1588 · 2 bình luận ·
-
Iterator error contexts lose parent links and absolute pathsCó thể làm lại được @DawnofGenX đã nhận 13 ngày trước và không có pull request nào đang mở. Đang mở
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 76/100
python-jsonschema/jsonschema#1584 · 3 bình luận ·
-
regex format checker crashes with RecursionError on deeply nested patternsCó thể đã có người làm @DawnofGenX đã nhận 13 ngày trước. Đang mở
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 78/100
python-jsonschema/jsonschema#1538 · 1 bình luận ·
-
is_duration raises an uncaught decimal.Overflow on a duration with a large exponentCó thể làm lại được Pull request cho issue này đã bị đóng mà không được merge. Đang mởNeeds Test Upstream
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 78/100
python-jsonschema/jsonschema#1511 · 1 bình luận ·
-
Độ khó 1/5 1-3 giờ Mức phù hợp với người mới 20/100
python-jsonschema/jsonschema#1589 ·
Tất cả issue của python-jsonschema/jsonschema
Issue tương tự
-
bug Size: XS
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 82/100
Maintainer thường phản hồi trong vòng 1 ngày
-
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 76/100
oposs/repo-infra#93 ·
Maintainer thường phản hồi trong vòng 1 ngày
-
bug
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 78/100
-
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 69/100
Graphify-Labs/graphify#4546 · 1 bình luận ·
Maintainer thường phản hồi trong vòng 1 ngày
-
Độ khó 1/5 Dưới một giờ Mức phù hợp với người mới 65/100
521xueweihan/HelloGitHub#4025 ·