Prefix modifier crashes on non-string values; reserved expansion stops encoding once the value contains a percent-escape
Chưa có ai nhận issue này.
Đánh giá
- Độ khó
- 2/5
- Thời gian dự kiến
- 1-3 giờ
- Mức phù hợp với người mới
- 85/100
Hướng nghiên cứu
Bắt đầu tại uritemplate/variable.py, nơi issue chỉ ra cách xử lý tiền tố và các đường xử lý quoting của phép mở rộng dành riêng. Đọc các phần RFC 6570 liên quan và tìm các bài kiểm tra bao phủ {var:N}, {+var} và {#var}. Thêm các bài kiểm tra hồi quy cho giá trị tiền tố không phải chuỗi và các escape phần trăm trộn với ký tự không an toàn; hoàn thành khi cả hai trường hợp được mở rộng theo RFC.
Do mô hình lập chỉ mục viết ra từ nội dung của issue.
Mô tả
Two related problems in uritemplate/variable.py, reproduced on 4.2.0 (main 8e46228).
1. {var:N} with an int or float value raises TypeError
>>> from uritemplate import expand
>>> expand("{a:1}", {"a": 12})
TypeError: 'int' object is not subscriptable
>>> expand("{a}", {"a": 12})
'12'
Non-string scalars are accepted everywhere else (they are converted with str() in Operator.quote), but the prefix is applied before that conversion: value = value[:prefix] if prefix else value. Converting first (str(value)[:prefix]) fixes it; RFC 6570 §2.4.1 defines the prefix on the string form of the value.
2. Reserved (+) and fragment (#) expansion leave unsafe characters unencoded if the value contains any %XX
>>> from uritemplate import expand
>>> expand("{+a}", {"a": "a b"})
'a%20b'
>>> expand("{+a}", {"a": "a b%41"})
'a b%41' # expected 'a%20b%41'
Operator._only_quote_unquoted_characters returns the value unchanged whenever unquote(value) != value, so one pre-existing percent-escape disables encoding for the whole string, including the space. RFC 6570 §3.2.3 says reserved expansion keeps existing pct-encoded triplets and encodes everything else that is not in reserved/unreserved; the check needs to be per character (or per triplet), not per string.
Happy to send a PR with tests for both if you would take one.
- Ngôn ngữ chính
- Python
- Star
- 246
- Fork
- 41
- Merge trung bình
- 8 giờ 20 phút
- Pull request đã merge (30 ngày)
- 3
Chuẩn bị môi trường
Dự án này không cung cấp dev container, Dockerfile hay hướng dẫn đóng góp, nên bạn cần tự thiết lập môi trường: hãy bắt đầu từ README và xem hướng dẫn đóng góp lần đầu của chúng tôi để biết các bước chung.
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-hyper/uritemplate
-
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 78/100
python-hyper/uritemplate#164 ·
-
Variable names are not validatedĐang mở
Độ khó 3/5 1-2 ngày Mức phù hợp với người mới 35/100
python-hyper/uritemplate#51 ·
-
Độ khó 5/5 Hơn một tuần Mức phù hợp với người mới 25/100
python-hyper/uritemplate#34 · 4 bình luận ·
-
Provide an API for validating URI TemplatesCó thể đã có người làm @sigmavirus24 đã nhận 3380 ngày trước. Đang mở
Độ khó 5/5 Hơn một tuần Mức phù hợp với người mới 35/100
python-hyper/uritemplate#33 · 9 bình luận ·
-
Add Contributor CovenantĐang mởenhancement
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 45/100
python-hyper/uritemplate#15 ·
Tất cả issue của python-hyper/uritemplate
Issue tương tự
-
bug
Độ khó 1/5 Dưới một giờ Mức phù hợp với người mới 88/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 68/100
Maintainer thường phản hồi trong vòng 1 ngày
-
documentation
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 84/100
sergey-miryanov/gcmon#230 ·
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 78/100
Azure-Samples/azure-search-openai-demo#3249 ·
Maintainer thường phản hồi trong vòng 1 ngày
-
[BUG] Failed archive extraction deletes the dataset cacheCó thể đã có người làm @dajiaohuang đã nhận hôm nay. Đang mở
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 78/100
alibaba/GraphScope#4674 ·