[#31647] [Backport #3666] Backport of r26311 (Bug #2587) — Luis Lavena <redmine@...>

Backport #3666: Backport of r26311 (Bug #2587)

13 messages 2010/08/07

[#31666] [Bug #3677] unable to run certain gem binaries' in windows 7 — Roger Pack <redmine@...>

Bug #3677: unable to run certain gem binaries' in windows 7

10 messages 2010/08/10

[#31676] [Backport #3680] Splatting calls to_ary instead of to_a in some cases — Tomas Matousek <redmine@...>

Backport #3680: Splatting calls to_ary instead of to_a in some cases

10 messages 2010/08/11

[#31681] [Bug #3683] getgrnam on computer with NIS group (+)? — Rocky Bernstein <redmine@...>

Bug #3683: getgrnam on computer with NIS group (+)?

13 messages 2010/08/11

[#31843] Garbage Collection Question — Asher <asher@...>

This question is no doubt a function of my own lack of understanding, but I think that asking it will at least help some other folks see what's going on with the internals during garbage collection.

17 messages 2010/08/25
[#31861] Re: Garbage Collection Question — Roger Pack <rogerdpack2@...> 2010/08/26

> The question in short: when an object goes out of scope and has no

[#31862] Re: Garbage Collection Question — Asher <asher@...> 2010/08/26

Right - so how does a pointer ever get off the stack?

[#31873] Re: Garbage Collection Question — Kurt Stephens <ks@...> 2010/08/27

On 8/26/10 11:51 AM, Asher wrote:

[#31894] Re: Garbage Collection Question — Asher <asher@...> 2010/08/27

I very much appreciate the response, and this is helpful in describing the narrative, but it's still a few steps behind my question - but it may very well have clarified some points that help us get there.

[#31896] Re: Garbage Collection Question — Evan Phoenix <evan@...> 2010/08/27

You have introduced something called a "root node" without defining it. What do you mean by this?

[#31885] Avoiding $LOAD_PATH pollution — Eric Hodel <drbrain@...7.net>

Last year Nobu asked me to propose an API for adding an object to

21 messages 2010/08/27

[#31947] not use system for default encoding — Roger Pack <rogerdpack2@...>

It strikes me as a bit "scary" to use system locale settings to

19 messages 2010/08/30

[#31971] Change Ruby's License to BSDL + Ruby's dual license — "NARUSE, Yui" <naruse@...>

Ruby's License will change to BSDL + Ruby's dual license

16 messages 2010/08/31

[ruby-core:31767] Re: [Backport #3711] IPAddr must not make DNS lookups via IPSocket.getaddress

From: Nobuyoshi Nakada <nobu@...>
Date: 2010-08-18 21:45:23 UTC
List: ruby-core #31767
Hi,

At Wed, 18 Aug 2010 22:07:42 +0900,
Philipp Kempgen wrote in [ruby-core:31756]:
> # DNS lookups are slow and totally unnecessary for IP addresses
> raise MustNotCallError.new( 'IPAddr.new() must not call IPSocket.getaddress()!' )

IPAddr.new already does not call getaddress for valid IPv4
addresses if IPv6 is not available.  Seems it should be enabled
even if IPv6 is available, since there is valid_v6? method
already.


diff --git a/lib/ipaddr.rb b/lib/ipaddr.rb
index 226a996..8d3ee00 100644
--- a/lib/ipaddr.rb
+++ b/lib/ipaddr.rb
@@ -17,45 +17,71 @@
 #
 require 'socket'
 
-unless Socket.const_defined? "AF_INET6"
+have_inet4 = Socket.const_defined? "AF_INET"
+have_inet6 = Socket.const_defined? "AF_INET6"
+
+unless have_inet6
   class Socket < BasicSocket
     AF_INET6 = Object.new
   end
+end
 
+if have_inet4
   class << IPSocket
     def valid_v4?(addr)
       if /\A(\d{1,3})\.(\d{1,3})\.(\d{1,3})\.(\d{1,3})\Z/ =~ addr
-        return $~.captures.all? {|i| i.to_i < 256}
+        return $~.captures.all? {|i| i.to_i < 256} || nil
       end
       return false
     end
+  end
+end
 
+if have_inet6
+  class << IPSocket
     def valid_v6?(addr)
+      s = nil
       # IPv6 (normal)
       return true if /\A[\dA-Fa-f]{1,4}(:[\dA-Fa-f]{1,4})*\Z/ =~ addr
       return true if /\A[\dA-Fa-f]{1,4}(:[\dA-Fa-f]{1,4})*::([\dA-Fa-f]{1,4}(:[\dA-Fa-f]{1,4})*)?\Z/ =~ addr
       return true if /\A::([\dA-Fa-f]{1,4}(:[\dA-Fa-f]{1,4})*)?\Z/ =~ addr
       # IPv6 (IPv4 compat)
-      return true if /\A[\dA-Fa-f]{1,4}(:[\dA-Fa-f]{1,4})*:/ =~ addr && valid_v4?($')
+      return s if /\A[\dA-Fa-f]{1,4}(:[\dA-Fa-f]{1,4})*:/ =~ addr && (s = valid_v4?($')) != false
       return true if /\A[\dA-Fa-f]{1,4}(:[\dA-Fa-f]{1,4})*::([\dA-Fa-f]{1,4}(:[\dA-Fa-f]{1,4})*:)?/ =~ addr && valid_v4?($')
-      return true if /\A::([\dA-Fa-f]{1,4}(:[\dA-Fa-f]{1,4})*:)?/ =~ addr && valid_v4?($')
+      return s if /\A::([\dA-Fa-f]{1,4}(:[\dA-Fa-f]{1,4})*:)?/ =~ addr && (s = valid_v4?($')) != false
 
       false
     end
+  end
+else
+  class << IPSocket
+    def valid_v6?(addr)
+      false
+    end
+  end
+end
 
+if have_inet6
+  class << IPSocket
     def valid?(addr)
-      valid_v4?(addr) || valid_v6?(addr)
+      (s = valid_v4?(addr)) == false ? valid_v6?(addr) : s
     end
+  end
+else
+  class << IPSocket
+    alias valid? valid_v4?
+  end
+end
 
-    alias getaddress_orig getaddress
-    def getaddress(s)
-      if valid?(s)
-        s
-      elsif /\A[-A-Za-z\d.]+\Z/ =~ s
-        getaddress_orig(s)
-      else
-        raise ArgumentError, "invalid address"
-      end
+class << IPSocket
+  alias getaddress_orig getaddress
+  def getaddress(s)
+    if v = valid?(s)
+      s
+    elsif v == false && /\A[-A-Za-z\d.]+\Z/ =~ s
+      getaddress_orig(s)
+    else
+      raise ArgumentError, "invalid address"
     end
   end
 end


-- 
Nobu Nakada

In This Thread

Prev Next