[#105450] [Ruby master Feature#18228] Add a `timeout` option to `IO.copy_stream` — "byroot (Jean Boussier)" <noreply@...>
SXNzdWUgIzE4MjI4IGhhcyBiZWVuIHJlcG9ydGVkIGJ5IGJ5cm9vdCAoSmVhbiBCb3Vzc2llciku
11 messages
2021/09/27
[ruby-core:105254] [Ruby master Bug#18165] resolv: IPv6 link local addresses do not accept dash as a valid zone_id character
From:
"kanashiro (Lucas Kanashiro)" <noreply@...>
Date:
2021-09-14 15:37:56 UTC
List:
ruby-core #105254
Issue #18165 has been updated by kanashiro (Lucas Kanashiro).
jeremyevans0 (Jeremy Evans) wrote in #note-3:
> This issue should be fixed by https://github.com/ruby/resolv/pull/2, which is still waiting for review.
Thanks for the link Jeremy. I tried to find a similar bug here but I did not look for any PR on Github, sorry for that, I thought this was the right venue to submit the patch.
I am happy if we can get this fixed soon, no matter which patch the maintainer wants to apply.
----------------------------------------
Bug #18165: resolv: IPv6 link local addresses do not accept dash as a valid zone_id character
https://bugs.ruby-lang.org/issues/18165#change-93663
* Author: kanashiro (Lucas Kanashiro)
* Status: Assigned
* Priority: Normal
* Assignee: akr (Akira Tanaka)
* ruby -v: 3.0.2
* Backport: 2.6: UNKNOWN, 2.7: UNKNOWN, 3.0: UNKNOWN
----------------------------------------
The support for IPv6 link local addresses was added to resolv [here](https://bugs.ruby-lang.org/projects/ruby-master/repository/git/revisions/2f12af42f7f26d570219b87a89294532a86a8ae2).
However, it does not take into account a `zone_id` with a dash (`-`) in it, just digits and letters (uppercase and lowercase). One could use the name of the network interface as `zone_id` and this one might contain a dash. For instance, in my system running Ubuntu I have `tap-5f507d638e8` and bridges like `br-dd8d2dfaa7eb`, those could be used as `zone_id`.
According to the [RFC](https://datatracker.ietf.org/doc/html/rfc4007#section-11) it is not mandatory to accept dash as a valid `zone_id` character but I believe this is a valid use case and resolv should support it. I found this out trying to build version `3.0.2` in Debian, and since my system contains some network interfaces with dash, the `TestResolvAddr::test_valid_socket_ip_address_list` was failing:
```
Expected /(?:(?-mix:\A((?x-mi:0
|1(?:[0-9][0-9]?)?
|2(?:[0-4][0-9]?|5[0-5]?|[6-9])?
|[3-9][0-9]?))\.((?x-mi:0
|1(?:[0-9][0-9]?)?
|2(?:[0-4][0-9]?|5[0-5]?|[6-9])?
|[3-9][0-9]?))\.((?x-mi:0
|1(?:[0-9][0-9]?)?
|2(?:[0-4][0-9]?|5[0-5]?|[6-9])?
|[3-9][0-9]?))\.((?x-mi:0
|1(?:[0-9][0-9]?)?
|2(?:[0-4][0-9]?|5[0-5]?|[6-9])?
|[3-9][0-9]?))\z))|(?:(?x-mi:
(?:(?x-mi:\A
(?:[0-9A-Fa-f]{1,4}:){7}
[0-9A-Fa-f]{1,4}
\z)) |
(?:(?x-mi:\A
((?:[0-9A-Fa-f]{1,4}(?::[0-9A-Fa-f]{1,4})*)?) ::
((?:[0-9A-Fa-f]{1,4}(?::[0-9A-Fa-f]{1,4})*)?)
\z)) |
(?:(?x-mi:\A
((?:[0-9A-Fa-f]{1,4}:){6,6})
(\d+)\.(\d+)\.(\d+)\.(\d+)
\z)) |
(?:(?x-mi:\A
((?:[0-9A-Fa-f]{1,4}(?::[0-9A-Fa-f]{1,4})*)?) ::
((?:[0-9A-Fa-f]{1,4}:)*)
(\d+)\.(\d+)\.(\d+)\.(\d+)
\z)) |
(?:(?x-mi:\A
[Ff][Ee]80
(?::[0-9A-Fa-f]{1,4}){7}
%[0-9A-Za-z]+
\z)) |
(?:(?x-mi:\A
[Ff][Ee]80:
(?:
((?:[0-9A-Fa-f]{1,4}(?::[0-9A-Fa-f]{1,4})*)?) ::
((?:[0-9A-Fa-f]{1,4}(?::[0-9A-Fa-f]{1,4})*)?)
|
:((?:[0-9A-Fa-f]{1,4}(?::[0-9A-Fa-f]{1,4})*)?)
)?
:[0-9A-Fa-f]{1,4}%[0-9A-Za-z.]+
\z))
))/ to match "fe80::4cd3:c6ff:fed2:9529%tap-4845bb4a54b".
```
Applying the patch below fixed the issue for me:
``` diff
diff --git a/lib/resolv.rb b/lib/resolv.rb
index b69c704..5de6a1f 100644
--- a/lib/resolv.rb
+++ b/lib/resolv.rb
@@ -2464,7 +2464,7 @@ class Resolv
Regex_8HexLinkLocal = /\A
[Ff][Ee]80
(?::[0-9A-Fa-f]{1,4}){7}
- %[0-9A-Za-z]+
+ %[0-9A-Za-z\-]+
\z/x
##
@@ -2478,7 +2478,7 @@ class Resolv
|
:((?:[0-9A-Fa-f]{1,4}(?::[0-9A-Fa-f]{1,4})*)?)
)?
- :[0-9A-Fa-f]{1,4}%[0-9A-Za-z.]+
+ :[0-9A-Fa-f]{1,4}%[0-9A-Za-z.\-]+
\z/x
##
```
---Files--------------------------------
0001-Make-resolv-accept-dash-in-zone_id-of-IPv6-link-loca.patch (958 Bytes)
--
https://bugs.ruby-lang.org/
Unsubscribe: <mailto:[email protected]?subject=unsubscribe>
<http://lists.ruby-lang.org/cgi-bin/mailman/options/ruby-core>