Issue #17524 has been updated by jeremyevans0 (Jeremy Evans).

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

This seems reasonable to me.  I chose a more conservative approach in the initial implementation, but we've already had to expand it once for s390, and if adding the rest of the unreserved characters fixes docker, we should do that.

I've submitted a pull request upstream for this: https://github.com/ruby/resolv/pull/2

----------------------------------------
Feature #17524: resolv: add some more characters in IPv6 link local zone id
https://bugs.ruby-lang.org/issues/17524#change-89844

* Author: no6v (Nobuhiro IMAI)
* Status: Assigned
* Priority: Normal
* Assignee: akr (Akira Tanaka)
----------------------------------------
According to [RFC6874](https://tools.ietf.org/html/rfc6874#section-2), IPv6 link local zone id is:

```
   ZoneID = 1*( unreserved / pct-encoded )
```

where `unreserved` in [RFC3986](https://tools.ietf.org/html/rfc3986#section-2.3) is as follow.

```
   unreserved  = ALPHA / DIGIT / "-" / "." / "_" / "~"
```

Actually, `docker` can create such an interface.

```sh
$ docker network create --ipv6 --subnet fe80::/64 --opt com.docker.network.bridge.name=ruby_3.0.0-1 ruby
$ ruby -rsocket -e 'p Socket.ip_address_list.last'
#<Addrinfo: fe80::1%ruby_3.0.0-1>
```

This makes `TestResolvAddr#test_valid_socket_ip_address_list` failure.
Supporting a `pct-encoded` may be overwork, but adding the all of `unreserved` to

* `Resolv::IPv6::Regex_8HexLinkLocal` and
* `Resolv::IPv6::Regex_CompressedHexLinkLocal`

sounds reasonable for me. What do you think?



-- 
https://bugs.ruby-lang.org/

Unsubscribe: <mailto:ruby-core-request / ruby-lang.org?subject=unsubscribe>
<http://lists.ruby-lang.org/cgi-bin/mailman/options/ruby-core>