https://bugs.ruby-lang.org/https://bugs.ruby-lang.org/favicon.ico?17113305112013-11-20T08:27:54ZRuby Issue Tracking SystemRuby master - Bug #9129: Regression in support for IPv6 literals in URIs with Net::HTTPhttps://bugs.ruby-lang.org/issues/9129?journal_id=430372013-11-20T08:27:54Zdrbrain (Eric Hodel)drbrain@segment7.net
<ul><li><strong>Category</strong> set to <i>lib</i></li><li><strong>Status</strong> changed from <i>Open</i> to <i>Assigned</i></li><li><strong>Assignee</strong> set to <i>naruse (Yui NARUSE)</i></li><li><strong>Backport</strong> changed from <i>1.9.3: UNKNOWN, 2.0.0: UNKNOWN</i> to <i>1.9.3: DONTNEED, 2.0.0: UNKNOWN</i></li></ul><p>=begin<br>
I can't find a regression here as no prior version has #proxy_uri:</p>
<p>$ ruby19 -v -rnet/http -e 'Net::HTTP.new("::1", 80).proxy_uri'<br>
ruby 1.9.3p374 (2013-01-15 revision 38858) [x86_64-darwin12.2.1]<br>
-e:1:in <code><main>': undefined method </code>proxy_uri' for #<Net::HTTP ::1:80 open=false> (NoMethodError)</p>
<p>IIRC net/http has always required square brackets for IPv6 addresses:</p>
<p>$ ruby -v -rnet/http -e 'Net::HTTP.new("[::1]", 80).proxy_uri'<br>
ruby 2.0.0p247 (2013-06-27 revision 41674) [x86_64-darwin12.4.0]<br>
$</p>
<p>This is consistent with URI:</p>
<p>$ ruby -ruri -e 'u = URI "http://[::1]"; u.host = "[::2]"; puts u'<br>
http://[::2]<br>
$ ruby -ruri -e 'u = URI "http://[::1]"; u.host = "::2"; puts u'<br>
[…]/uri/generic.rb:605:in `check_host': bad component(expected host component): ::2 (URI::InvalidComponentError)</p>
<p>If you are using URI to figure out the host portion, use #host, not #hostname:</p>
<p>$ ruby -ruri -e 'u = URI "http://[::1]"; p u.host, u.hostname'<br>
"[::1]"<br>
"::1"</p>
<p>See also the URI::HTTP#host and #hostname documentation.</p>
<p>I have assigned this to naruse as he is Net::HTTP maintainer, maybe I am wrong.</p>
<p>=end</p> Ruby master - Bug #9129: Regression in support for IPv6 literals in URIs with Net::HTTPhttps://bugs.ruby-lang.org/issues/9129?journal_id=430382013-11-20T10:27:32Zkallistec (Daniel DeLeo)dan@kallistec.com
<ul></ul><p>Hi Eric,<br>
Earlier ruby versions handled proxy support differently (I'm not very familiar with either the old or new code), so my repro won't show that. The issue is that HTTP#proxy_uri is in the path for all HTTP requests, at least the way I'm using Net::HTTP. Here is a section of stack trace from my application:</p>
<p>/Users/ddeleo/.rbenv/versions/2.0.0-p247/lib/ruby/2.0.0/uri/generic.rb:214:in <code>initialize' /Users/ddeleo/.rbenv/versions/2.0.0-p247/lib/ruby/2.0.0/uri/http.rb:84:in </code>initialize'<br>
/Users/ddeleo/.rbenv/versions/2.0.0-p247/lib/ruby/2.0.0/uri/common.rb:214:in <code>new' /Users/ddeleo/.rbenv/versions/2.0.0-p247/lib/ruby/2.0.0/uri/common.rb:214:in </code>parse'<br>
/Users/ddeleo/.rbenv/versions/2.0.0-p247/lib/ruby/2.0.0/uri/common.rb:747:in <code>parse' /Users/ddeleo/.rbenv/versions/2.0.0-p247/lib/ruby/2.0.0/uri/common.rb:994:in </code>URI'<br>
/Users/ddeleo/.rbenv/versions/2.0.0-p247/lib/ruby/2.0.0/net/http.rb:1027:in <code>proxy_uri' /Users/ddeleo/.rbenv/versions/2.0.0-p247/lib/ruby/2.0.0/net/http.rb:1014:in </code>proxy?'<br>
/Users/ddeleo/.rbenv/versions/2.0.0-p247/lib/ruby/2.0.0/net/http.rb:868:in <code>connect' /Users/ddeleo/.rbenv/versions/2.0.0-p247/lib/ruby/2.0.0/net/http.rb:862:in </code>do_start'<br>
/Users/ddeleo/.rbenv/versions/2.0.0-p247/lib/ruby/2.0.0/net/http.rb:851:in <code>start' /Users/ddeleo/.rbenv/versions/2.0.0-p247/lib/ruby/2.0.0/net/http.rb:1367:in </code>request'</p>
<p>If I understand correctly, the first argument to Net::HTTP.new should be an address that you can safely pass on to the socket layer code. For example, run this on Ruby 1.9.3:</p>
<p>ruby -rnet/http -e "Net::HTTP.new('::1', 80).get('/')" # works if you're running an HTTP server, Errno::ECONNREFUSED otherwise</p>
<p>Whereas this:</p>
<p>ruby -rnet/http -e "Net::HTTP.new('[::1]', 80).get('/')"</p>
<p>Gives you "getaddrinfo: nodename nor servname provided, or not known (SocketError)" because it's treating the whole thing with the brackets as the hostname/address.</p>
<p>It's true that in URIs you need to wrap an IPv6 literal in square brackets, which is why I believe this particular line of code is incorrect: <a href="https://github.com/ruby/ruby/blob/trunk/lib/net/http.rb#L1028" class="external">https://github.com/ruby/ruby/blob/trunk/lib/net/http.rb#L1028</a></p>
<p>Thanks</p> Ruby master - Bug #9129: Regression in support for IPv6 literals in URIs with Net::HTTPhttps://bugs.ruby-lang.org/issues/9129?journal_id=430392013-11-20T10:33:36Zkallistec (Daniel DeLeo)dan@kallistec.com
<ul></ul><p>I will add also that this example gives a SocketError (as I would expect it to and is consistent with 1.9.3) on Ruby 2.0:</p>
<p>ruby -rnet/http -e "Net::HTTP.new('[::1]', 80).get('/')"<br>
/Users/ddeleo/.rbenv/versions/2.0.0-p247/lib/ruby/2.0.0/net/http.rb:878:in <code>initialize': getaddrinfo: nodename nor servname provided, or not known (SocketError) from /Users/ddeleo/.rbenv/versions/2.0.0-p247/lib/ruby/2.0.0/net/http.rb:878:in </code>open'<br>
from /Users/ddeleo/.rbenv/versions/2.0.0-p247/lib/ruby/2.0.0/net/http.rb:878:in <code>block in connect' from /Users/ddeleo/.rbenv/versions/2.0.0-p247/lib/ruby/2.0.0/timeout.rb:52:in </code>timeout'<br>
from /Users/ddeleo/.rbenv/versions/2.0.0-p247/lib/ruby/2.0.0/net/http.rb:877:in <code>connect' from /Users/ddeleo/.rbenv/versions/2.0.0-p247/lib/ruby/2.0.0/net/http.rb:862:in </code>do_start'<br>
from /Users/ddeleo/.rbenv/versions/2.0.0-p247/lib/ruby/2.0.0/net/http.rb:851:in <code>start' from /Users/ddeleo/.rbenv/versions/2.0.0-p247/lib/ruby/2.0.0/net/http.rb:1367:in </code>request'<br>
from /Users/ddeleo/.rbenv/versions/2.0.0-p247/lib/ruby/2.0.0/net/http.rb:1126:in <code>get' from -e:1:in </code>'</p> Ruby master - Bug #9129: Regression in support for IPv6 literals in URIs with Net::HTTPhttps://bugs.ruby-lang.org/issues/9129?journal_id=430742013-11-22T14:31:46Znaruse (Yui NARUSE)naruse@airemix.jp
<ul><li><strong>Target version</strong> set to <i>2.1.0</i></li></ul> Ruby master - Bug #9129: Regression in support for IPv6 literals in URIs with Net::HTTPhttps://bugs.ruby-lang.org/issues/9129?journal_id=448102014-01-30T06:17:24Zhsbt (Hiroshi SHIBATA)hsbt@ruby-lang.org
<ul><li><strong>Target version</strong> changed from <i>2.1.0</i> to <i>2.2.0</i></li></ul> Ruby master - Bug #9129: Regression in support for IPv6 literals in URIs with Net::HTTPhttps://bugs.ruby-lang.org/issues/9129?journal_id=482072014-08-05T19:37:49Znaruse (Yui NARUSE)naruse@airemix.jp
<ul><li><strong>Status</strong> changed from <i>Assigned</i> to <i>Closed</i></li><li><strong>% Done</strong> changed from <i>0</i> to <i>100</i></li></ul><p>Applied in changeset r47079.</p>
<hr>
<ul>
<li>lib/net/http.rb (Net::HTTP.proxy_uri): use initializer instead<br>
of parser to handle IPv6 address. [Bug <a class="issue tracker-1 status-5 priority-4 priority-default closed" title="Bug: Regression in support for IPv6 literals in URIs with Net::HTTP (Closed)" href="https://bugs.ruby-lang.org/issues/9129">#9129</a>]</li>
</ul> Ruby master - Bug #9129: Regression in support for IPv6 literals in URIs with Net::HTTPhttps://bugs.ruby-lang.org/issues/9129?journal_id=501402014-11-27T11:41:16Znagachika (Tomoyuki Chikanaga)nagachika00@gmail.com
<ul><li><strong>Backport</strong> changed from <i>1.9.3: DONTNEED, 2.0.0: UNKNOWN</i> to <i>1.9.3: DONTNEED, 2.0.0: REQUIRED</i></li></ul><p>according to <a class="issue tracker-4 status-5 priority-4 priority-default closed" title="Backport: Backport r47079 to 2.1 (Closed)" href="https://bugs.ruby-lang.org/issues/10531">#10531</a> it seems required to be backported into ruby_2_1.</p> Ruby master - Bug #9129: Regression in support for IPv6 literals in URIs with Net::HTTPhttps://bugs.ruby-lang.org/issues/9129?journal_id=501602014-11-28T07:41:54Zusa (Usaku NAKAMURA)usa@garbagecollect.jp
<ul><li><strong>Related to</strong> <i><a class="issue tracker-4 status-5 priority-4 priority-default closed" href="/issues/10530">Backport #10530</a>: Backport r47079 to 2.0.0</i> added</li></ul> Ruby master - Bug #9129: Regression in support for IPv6 literals in URIs with Net::HTTPhttps://bugs.ruby-lang.org/issues/9129?journal_id=501622014-11-28T07:42:13Zusa (Usaku NAKAMURA)usa@garbagecollect.jp
<ul><li><strong>Backport</strong> changed from <i>1.9.3: DONTNEED, 2.0.0: REQUIRED</i> to <i>2.0.0: DONE, 2.1: REQUIRED</i></li></ul> Ruby master - Bug #9129: Regression in support for IPv6 literals in URIs with Net::HTTPhttps://bugs.ruby-lang.org/issues/9129?journal_id=507092014-12-30T15:38:25Znagachika (Tomoyuki Chikanaga)nagachika00@gmail.com
<ul><li><strong>Backport</strong> changed from <i>2.0.0: DONE, 2.1: REQUIRED</i> to <i>2.0.0: DONE, 2.1: DONE</i></li></ul><p>Backported at r49076.</p>