Project

General

Profile

Actions

Bug #18165

open

resolv: IPv6 link local addresses do not accept dash as a valid zone_id character

Added by kanashiro (Lucas Kanashiro) about 1 month ago. Updated about 1 month ago.

Status:
Assigned
Priority:
Normal
Target version:
-
[ruby-core:105231]

Description

The support for IPv6 link local addresses was added to resolv here.

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 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 --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

Updated by mame (Yusuke Endoh) about 1 month ago

  • Assignee set to akr (Akira Tanaka)
  • Status changed from Open to Assigned

Updated by jeremyevans0 (Jeremy Evans) about 1 month ago

This issue should be fixed by https://github.com/ruby/resolv/pull/2, which is still waiting for review.

Updated by kanashiro (Lucas Kanashiro) about 1 month ago

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.

Actions

Also available in: Atom PDF