parse_header_links drops parameters when a value contains '=' or a quoted ';'

Đang mở Phù hợp với người mới
#7,643 1 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ó
2/5
Thời gian dự kiến
1-3 giờ
Mức phù hợp với người mới
78/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
api, backend

Hướng nghiên cứu

Bắt đầu tại src/requests/utils.py, ở parse_header_links, và kiểm tra việc phân tích cú pháp tham số. Thêm các kiểm thử hồi quy cho giá trị chứa = và giá trị được đặt trong dấu ngoặc kép có chứa ;, sau đó chạy các kiểm thử liên quan đến tiện ích này. Công việc hoàn tất khi cả hai trường hợp tái hiện đều giữ nguyên mọi tham số và toàn bộ giá trị của chúng.

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

Mô tả

Summary

requests.utils.parse_header_links silently drops Link header parameters in two cases.

1. Parameter value containing =

In src/requests/utils.py, key, value = param.split("=") raises ValueError when the value contains =. The except ValueError: break then discards every remaining parameter.

2. ; inside a quoted value

params.split(";") ignores quoting, so a quoted value containing ; is truncated and the rest is lost.

Repro

from requests.utils import parse_header_links as p
p('<https://a/b>; rel="next"; title="x=y"; type="t"')
# actual:   [{'url': 'https://a/b', 'rel': 'next'}]          # title and type missing
# expected: [{'url': 'https://a/b', 'rel': 'next', 'title': 'x=y', 'type': 't'}]

p('<https://a/b>; title="a;b"; rel=next')
# actual:   [{'url': 'https://a/b', 'title': 'a'}]            # rel missing, title truncated
# expected: [{'url': 'https://a/b', 'title': 'a;b', 'rel': 'next'}]

Suggested fix

Use param.split("=", 1) and split parameters in a quote-aware way. I'm happy to open a PR with tests if this is welcome.

Checked on current main. I searched existing issues (#2250, #2707, #7177 are related to other cases) and found none covering this.

Ngôn ngữ chính
Python
Star
54.7k
Fork
10.8k
Merge trung bình
18 phút
Pull request đã merge (30 ngày)
1

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 psf/requests

Tất cả issue của psf/requests

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.