[#11439] comments needed for Random class — "NAKAMURA, Hiroshi" <nakahiro@...>

-----BEGIN PGP SIGNED MESSAGE-----

15 messages 2007/06/12

[#11450] Re: new method dispatch rule (matz' proposal) — David Flanagan <david@...>

This is a late response to the very long thread that started back in

17 messages 2007/06/13

[#11482] Ruby Changes Its Mind About Non-Word Characters — James Edward Gray II <james@...>

Does this look like a bug to anyone else?

10 messages 2007/06/16

[#11505] Question about the patchlevel release cycle — Sylvain Joyeux <sylvain.joyeux@...4x.org>

1.8.6 thread support was broken in bad ways. It stayed for three months

20 messages 2007/06/20
[#11512] Re: Question about the patchlevel release cycle — Urabe Shyouhei <shyouhei@...> 2007/06/20

Hi, I'm the 1.8.6 branch manager.

[#11543] Re: Apple reportedly to ship with ruby 1.8.6-p36 unless informed what to patch — James Edward Gray II <james@...>

On Jun 27, 2007, at 4:47 PM, Bill Kelly wrote:

10 messages 2007/06/27

[PATCH] URI::Generic: remove [] from IPv6 hosts

From: Stephan Maka <stephan@...>
Date: 2007-06-01 11:52:18 UTC
List: ruby-core #11385
Hi

When parsing an URI such as "http://[::1]/..." the host part will be
"[::1]".  This is not useful for ie. TCPSocket::new. The attached patch
removes the brackets when parsing and reattaches them at serialization.

I know the code has poor style but should explain what I mean.


Stephan

Attachments (1)

ruby-1.8.6-uri-ipv6.patch (1.94 KB, text/x-diff)
diff -urN ruby-1.8.6/lib/uri/common.rb ruby-1.8.6-mine/lib/uri/common.rb
--- ruby-1.8.6/lib/uri/common.rb	2007-02-15 03:41:45.000000000 +0100
+++ ruby-1.8.6-mine/lib/uri/common.rb	2007-06-01 13:30:58.000000000 +0200
@@ -184,6 +184,8 @@
 
     # :stopdoc:
 
+    IPV6REF = Regexp.new('^' + PATTERN::IPV6REF + '$')
+
     # for URI::split
     ABS_URI = Regexp.new('^' + PATTERN::X_ABS_URI + '$', #'
                          Regexp::EXTENDED, 'N').freeze
@@ -437,6 +439,11 @@
     end
 
     path = '' if !path && !opaque # (see RFC2396 Section 5.2)
+    if host =~ IPV6REF
+      host.sub!(/^\[/, '')
+      host.sub!(/\]$/, '')
+    end
+
     ret = [
       scheme, 
       userinfo, host, port,         # X
diff -urN ruby-1.8.6/lib/uri/generic.rb ruby-1.8.6-mine/lib/uri/generic.rb
--- ruby-1.8.6/lib/uri/generic.rb	2007-02-15 08:45:04.000000000 +0100
+++ ruby-1.8.6-mine/lib/uri/generic.rb	2007-06-01 13:30:35.000000000 +0200
@@ -1019,7 +1019,7 @@
             str << '@'
           end
           if @host
-            str << @host
+            str << ((@host =~ /:/) ? "[#{@host}]" : @host)
           end
           if @port && @port != self.default_port
             str << ':'
diff -urN ruby-1.8.6/test/uri/test_http.rb ruby-1.8.6-mine/test/uri/test_http.rb
--- ruby-1.8.6/test/uri/test_http.rb	2007-02-13 00:01:19.000000000 +0100
+++ ruby-1.8.6-mine/test/uri/test_http.rb	2007-06-01 13:35:18.000000000 +0200
@@ -57,6 +57,15 @@
       u.select(:scheme, :host, :not_exist, :port)
     end
   end
+
+  def test_ipv6
+    u1 = URI.parse('http://[fe80:1243:1234:1234:5678:5678:9abc:9abc]/')
+    assert_equal(['http', 'fe80:1243:1234:1234:5678:5678:9abc:9abc', 80, '/'], u1.select(:scheme, :host, :port, :path))
+    assert_equal('http://[fe80:1243:1234:1234:5678:5678:9abc:9abc]/', u1.to_s)
+    u2 = URI.parse('http://[::1]:8080/')
+    assert_equal(['http', '::1', 8080, '/'], u2.select(:scheme, :host, :port, :path))
+    assert_equal('http://[::1]:8080/', u2.to_s)
+  end
 end
 
 

In This Thread

Prev Next