https://redmine.ruby-lang.org/
https://redmine.ruby-lang.org/favicon.ico?1711330511
2017-04-04T13:32:50Z
Ruby Issue Tracking System
Ruby master - Bug #13399: IPAddr accepts invalid address mask
https://redmine.ruby-lang.org/issues/13399?journal_id=64060
2017-04-04T13:32:50Z
nobu (Nobuyoshi Nakada)
nobu@ruby-lang.org
<ul><li><strong>Description</strong> updated (<a title="View differences" href="/journals/64060/diff?detail_id=44625">diff</a>)</li><li><strong>Status</strong> changed from <i>Open</i> to <i>Assigned</i></li><li><strong>Assignee</strong> set to <i>knu (Akinori MUSHA)</i></li></ul><p>After fixing it, I found that <code>drb/acl</code> depends on this behavior.</p>
<pre><code class="diff syntaxhl" data-language="diff"><span class="gh">diff --git a/lib/ipaddr.rb b/lib/ipaddr.rb
index 6f70ebf773..4f87738be1 100644
</span><span class="gd">--- a/lib/ipaddr.rb
</span><span class="gi">+++ b/lib/ipaddr.rb
</span><span class="p">@@ -422,6 +422,10 @@</span>
raise InvalidPrefixError, "address family is not same"
end
@mask_addr = m.to_i
<span class="gi">+ n = @mask_addr ^ m.instance_variable_get(:@mask_addr)
+ unless ((n + 1) & n).zero?
+ raise InvalidPrefixError, "invalid mask #{mask}"
+ end
</span> @addr &= @mask_addr
return self
end
<span class="gh">diff --git a/test/test_ipaddr.rb b/test/test_ipaddr.rb
index 86482a08bd..c49e1ab240 100644
</span><span class="gd">--- a/test/test_ipaddr.rb
</span><span class="gi">+++ b/test/test_ipaddr.rb
</span><span class="p">@@ -79,6 +79,7 @@</span>
assert_raise(IPAddr::InvalidPrefixError) { IPAddr.new("::1/255.255.255.0") }
assert_raise(IPAddr::InvalidPrefixError) { IPAddr.new("::1/129") }
assert_raise(IPAddr::InvalidPrefixError) { IPAddr.new("192.168.0.1/33") }
<span class="gi">+ assert_raise(IPAddr::InvalidPrefixError) { IPAddr.new("192.168.0.1/255.255.255.1") }
</span> assert_raise(IPAddr::AddressFamilyError) { IPAddr.new(1) }
assert_raise(IPAddr::AddressFamilyError) { IPAddr.new("::ffff:192.168.1.2/120", Socket::AF_INET) }
end
<span class="p">@@ -234,7 +235,14 @@</span>
def test_mask
a = @a.mask(32)
assert_equal("3ffe:505::", a.to_s)
<span class="gi">+ assert_equal("3ffe:505::", @a.mask("ffff:ffff::").to_s)
</span> assert_equal("3ffe:505:2::", @a.to_s)
<span class="gi">+ a = IPAddr.new("192.168.2.0/24")
+ assert_equal("192.168.0.0", a.mask(16).to_s)
+ assert_equal("192.168.0.0", a.mask("255.255.0.0").to_s)
+ assert_equal("192.168.2.0", a.to_s)
+ assert_raise(IPAddr::InvalidPrefixError) {a.mask("255.255.0.255")}
+ assert_raise(IPAddr::InvalidPrefixError) {@a.mask("ffff:1::")}
</span> end
def test_include?
</code></pre>
Ruby master - Bug #13399: IPAddr accepts invalid address mask
https://redmine.ruby-lang.org/issues/13399?journal_id=64078
2017-04-05T07:20:58Z
rtib (Tibor Repasi)
<ul></ul><p>I've just applied the patch locally. It works as expected.</p>
<p>Thank you.</p>
Ruby master - Bug #13399: IPAddr accepts invalid address mask
https://redmine.ruby-lang.org/issues/13399?journal_id=67403
2017-10-21T08:03:15Z
knu (Akinori MUSHA)
knu@ruby-lang.org
<ul></ul><p>nobu (Nobuyoshi Nakada) wrote:</p>
<blockquote>
<p>After fixing it, I found that <code>drb/acl</code> depends on this behavior.</p>
</blockquote>
<p>Thanks for the patch, but what do you mean by <code>drb/acl</code> depending on this behavior?</p>
Ruby master - Bug #13399: IPAddr accepts invalid address mask
https://redmine.ruby-lang.org/issues/13399?journal_id=67404
2017-10-21T08:20:16Z
knu (Akinori MUSHA)
knu@ruby-lang.org
<ul></ul><p>Now I see!</p>
<pre><code>% RBENV_VERSION=ruby_2_5 ruby -Itest/lib:lib test/drb/test_acl.rb
Run options:
# Running tests:
[ 2/12] DRbTests::ACLEntryTest#test_ip = 0.00 s
1) Failure:
DRbTests::ACLEntryTest#test_ip [test/drb/test_acl.rb:72]:
Expected #<ACL::ACLEntry:0x00007fb2d8842e60
@pat=[:name, /\A192\.168\.0\.1\/255\.255\.0\.255\z/]> to be match ["AF_INET", 10000, "x68k.linux.or.jp", "192.168.1.1"].
[ 5/12] DRbTests::ACLListTest#test_1 = 0.00 s
2) Failure:
DRbTests::ACLListTest#test_1 [test/drb/test_acl.rb:141]:
Expected #<ACL::ACLList:0x00007fb2d88cba08
@list=
[#<ACL::ACLEntry:0x00007fb2d88cb828
@pat=[:name, /\A192\.0\.0\.1\/255\.0\.0\.255\z/]>,
#<ACL::ACLEntry:0x00007fb2d88d1818 @pat=[:name, /\Ayum\..+\.jp\z/]>]> to be match ["AF_INET", 10000, "x68k.linux.or.jp", "192.168.1.1"].
Finished tests in 0.009075s, 1322.3140 tests/s, 8925.6198 assertions/s.
12 tests, 81 assertions, 2 failures, 0 errors, 0 skips
ruby -v: ruby 2.5.0dev (2017-10-21 trunk 60228) [x86_64-darwin17]
</code></pre>
Ruby master - Bug #13399: IPAddr accepts invalid address mask
https://redmine.ruby-lang.org/issues/13399?journal_id=67454
2017-10-21T13:34:31Z
knu (Akinori MUSHA)
knu@ruby-lang.org
<ul><li><strong>Status</strong> changed from <i>Assigned</i> to <i>Closed</i></li></ul><p>Applied in changeset trunk|r60270.</p>
<hr>
<p>Import ipaddr 1.2.0</p>
<ul>
<li>Add IPAddr#prefix</li>
<li>Add IPAddr#loopback?</li>
<li>Add IPAddr#private? [Feature <a class="issue tracker-2 status-5 priority-4 priority-default closed" title="Feature: IPAddr#private? (Closed)" href="https://redmine.ruby-lang.org/issues/11666">#11666</a>]</li>
<li>Add IPAddr#link_local? [Feature <a class="issue tracker-2 status-5 priority-4 priority-default closed" title="Feature: Add method(s) to IPAddr for determining whether an address is link local (Closed)" href="https://redmine.ruby-lang.org/issues/10912">#10912</a>]</li>
<li>Reject invalid address mask [Bug <a class="issue tracker-1 status-5 priority-4 priority-default closed" title="Bug: IPAddr accepts invalid address mask (Closed)" href="https://redmine.ruby-lang.org/issues/13399">#13399</a>]</li>
<li>Warn that IPAddr#ipv4_compat and #ipv4_compat? are deprecated [#Bug 13769]</li>
</ul>