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

URI::Generic.use_proxy? cannot match IPv6 literal addresses in no_proxy

Đang mở
#218 0 bình luận 2 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
68/100
Loại issue
Lỗi
Độ rõ ràng
Khá rõ ràng
Mức độ hoạt động
Ít trao đổi
Công nghệ
ruby
Lĩnh vực
networking

Hướng nghiên cứu

Bắt đầu tại URI::Generic.use_proxy? và kiểm tra regex phân tích no_proxy được hiển thị trong issue. Tái hiện hành vi bằng ví dụ Ruby được cung cấp, sau đó xác minh rằng các mục IPv6 dạng trần, được đặt trong ngoặc vuông, được đặt trong ngoặc vuông kèm cổng và ở dạng CIDR đều được nhận diện, đồng thời việc so khớp proxy hiện có vẫn hoạt động.

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

Mô tả

Summary

URI::Generic.use_proxy? silently ignores IPv6 literal addresses in no_proxy / NO_PROXY, causing IPv6 targets to always be proxied even when they should be excluded.

Root cause

The parsing regex in use_proxy? splits no_proxy entries on colons to extract an optional port:

no_proxy.scan(/([^:,\s]+)(?::(\d+))?/) {|p_host, p_port|

IPv6 addresses contain colons as part of their syntax (e.g. 2001:db8::1), so this regex mangles them; the address is split into fragments rather than parsed as a host. As a result:

  • Bare entries like 2001:db8::1 are never correctly captured into p_host
  • Bracketed entries like [2001:db8::1] are captured literally (with brackets) and never reach the IPAddr.new(p_host).include?(addr) check since IPAddr.new("[2001:db8::1]") raises InvalidAddressError
  • Bracketed entries with port like [2001:db8::1]:8080 are similarly broken

Reproduction

require 'uri'
require 'resolv'

# IPv6 target that should bypass the proxy
no_proxy = "2001:db8::1"
hostname  = "2001:db8::1"
addr      = Resolv.getaddress(hostname) rescue hostname
port      = 80

puts URI::Generic.use_proxy?(hostname, addr, port, no_proxy)
# Expected: false (should bypass proxy)
# Actual:   true  (incorrectly routes through proxy)

Expected behavior

All three real-world no_proxy formats for IPv6 should be recognized:

Format Example
Bare address 2001:db8::1
Bracketed (RFC 2732 / RFC 3986) [2001:db8::1]
Bracketed with port [2001:db8::1]:8080
CIDR 2001:db8::/32
Ngôn ngữ chính
Ruby
Star
125
Fork
65
Merge trung bình
6 giờ 4 phút
Pull request đã merge (30 ngày)
2

Hướng dẫn đóng góp

Chưa lập chỉ mục được hướng dẫn đóng góp cho kho mã nguồn này

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 ruby/uri

Tất cả issue của ruby/uri

Issue tương tự

Thêm issue về Ruby

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.