From: "kanashiro (Lucas Kanashiro)" Date: 2021-09-13T22:32:44+00:00 Subject: [ruby-core:105232] [Ruby master Bug#18165] resolv: IPv6 link local addresses do not accept dash as a valid zone_id character Issue #18165 has been updated by kanashiro (Lucas Kanashiro). File 0001-Make-resolv-accept-dash-in-zone_id-of-IPv6-link-loca.patch added The mentioned patch is attached. ---------------------------------------- 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-93639 * Author: kanashiro (Lucas Kanashiro) * Status: Open * Priority: Normal * 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: