URI::Generic.use_proxy? cannot match IPv6 literal addresses in no_proxy
Nadie ha tomado este issue todavía.
Evaluación
- Dificultad
- 3/5
- Tiempo estimado
- 1-2 días
- Aptitud para principiantes
- 68/100
- Tipo de issue
- Error
- Claridad
- Bastante claro
- Estado de actividad
- Tranquilo
- Stack tecnológico
- ruby
- Área
- networking
Línea de trabajo
Comienza en URI::Generic.use_proxy? e inspecciona la expresión regular de análisis de no_proxy mostrada en el issue. Reproduce el comportamiento con el ejemplo de Ruby proporcionado y, después, verifica que se reconozcan las entradas IPv6 sin corchetes, entre corchetes, entre corchetes con puerto y en formato CIDR, mientras el matching existente del proxy sigue funcionando.
Escrito por el modelo de indexación a partir del texto del issue.
Descripción
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::1are never correctly captured intop_host - Bracketed entries like
[2001:db8::1]are captured literally (with brackets) and never reach theIPAddr.new(p_host).include?(addr)check sinceIPAddr.new("[2001:db8::1]")raisesInvalidAddressError - Bracketed entries with port like
[2001:db8::1]:8080are 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 |
- Lenguaje dominante
- Ruby
- Estrellas
- 125
- Forks
- 65
- Merge medio
- 6 h 4 min
- PR fusionados (30 d)
- 2
Guía de contribución
No hay ninguna guía de contribución indexada para este repositorio
Primeros pasos
- Lee el issue completo y luego la guía de contribución del proyecto.
- Comenta en el issue que vas a ocuparte — evita que dos personas hagan lo mismo.
- Haz un fork del repositorio y trabaja en una rama.
- Abre un pull request que haga referencia al número del issue.
Más de ruby/uri
-
Dificultad 3/5 1-2 días Aptitud para principiantes 48/100
-
upstream contact for Debian Abierto
Dificultad 1/5 Menos de una hora Aptitud para principiantes 25/100
-
Dificultad 3/5 1-2 días Aptitud para principiantes 68/100
-
Dificultad 3/5 1-2 días Aptitud para principiantes 52/100
-
Dificultad 5/5 Más de una semana Aptitud para principiantes 35/100
Issues similares
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 70/100
-
bug
Dificultad 1/5 Menos de una hora Aptitud para principiantes 90/100
riscv/riscv-unified-db#2626 ·
-
Component: GLib
Dificultad 2/5 1-3 horas Aptitud para principiantes 70/100
-
ds-drift
Dificultad 2/5 1-3 horas Aptitud para principiantes 70/100
we-promise/sure#3693 ·
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 75/100
simp/pupmod-simp-simp#395 ·