Hacktoberfest 2026: le issue che i maintainer hanno segnato per ottobre, aperte e adatte ai principianti. Sfoglia le issue Hacktoberfest

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

Aperta
#218 0 commenti 2 reazioni 0 assegnatari Vedi su GitHub

Nessuno ha ancora preso questa issue.

Valutazione

Difficoltà
3/5
Tempo stimato
1-2 giorni
Idoneità per principianti
68/100
Tipo di issue
Bug
Chiarezza
Abbastanza chiara
Stato di attività
Tranquilla
Stack tecnologico
ruby
Ambito
networking

Direzione di ricerca

Inizia da URI::Generic.use_proxy? ed esamina l’espressione regolare per il parsing di no_proxy mostrata nell’issue. Riproduci il comportamento con l’esempio Ruby fornito, quindi verifica che vengano riconosciute le voci IPv6 nude, tra parentesi quadre, tra parentesi quadre con porta e in formato CIDR, mentre il matching esistente del proxy continua a funzionare.

Scritto dal modello di indicizzazione a partire dal testo della issue.

Descrizione

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
Lingua principale
Ruby
Stelle
125
Fork
65
Merge medio
6h 4m
PR unite (30g)
2

Guida per i contributori

Nessuna guida per i contributori indicizzata per questo repository

Come iniziare

  1. Leggi tutta la issue e poi la guida ai contributi del progetto.
  2. Commenta sulla issue per dire che te ne occupi tu — evita che due persone facciano lo stesso lavoro.
  3. Fai un fork del repository e lavora su un branch.
  4. Apri una pull request che faccia riferimento al numero della issue.

Altre issue di ruby/uri

Tutte le issue di ruby/uri

Issue simili

Altre issue su Ruby

Ricevi le nuove issue nella tua casella

Un breve riepilogo di issue GitHub adatte ai principianti.