From: usa@... Date: 2015-02-18T07:03:38+00:00 Subject: [ruby-core:68165] [Ruby trunk - Bug #10857] Resolv::DNS::Resource ==() method incorrectly returns false due to TTL attrib Issue #10857 has been updated by Usaku NAKAMURA. Backport changed from 2.0.0: REQUIRED, 2.1: DONE, 2.2: DONE to 2.0.0: DONE, 2.1: DONE, 2.2: DONE ruby_2_0_0 r49639 merged revision(s) 49620. ---------------------------------------- Bug #10857: Resolv::DNS::Resource ==() method incorrectly returns false due to TTL attrib https://bugs.ruby-lang.org/issues/10857#change-51541 * Author: Shayne Clausson * Status: Closed * Priority: Normal * Assignee: * ruby -v: ruby 1.9.3p545 (2014-02-24) [i386-mingw32] * Backport: 2.0.0: DONE, 2.1: DONE, 2.2: DONE ---------------------------------------- ~~~ruby require 'resolv' resolver = Resolv::DNS.new(:nameserver => ['8.8.8.8'], :search => [], :ndots => 1) hosts = resolver.getresources('ruby.org', Resolv::DNS::Resource::IN::A) returned_record = hosts.first a = Resolv::DNS::Resource::IN::A #create an identical record new_record = a.new(returned_record.address) new_record == returned_record =>false #but should return true #If I change this class Resolv::DNS::Resource def ==(other) # :nodoc: return false unless self.class == other.class s_ivars = self.instance_variables s_ivars.sort! **s_ivars.delete "@ttl"** o_ivars = other.instance_variables o_ivars.sort! **o_ivars.delete "@ttl"** return s_ivars == o_ivars && s_ivars.collect {|name| self.instance_variable_get name} == o_ivars.collect {|name| other.instance_variable_get name} end end #To this class Resolv::DNS::Resource def ==(other) # :nodoc: return false unless self.class == other.class s_ivars = self.instance_variables s_ivars.sort! **s_ivars.delete(:@ttl)** o_ivars = other.instance_variables o_ivars.sort! **o_ivars.delete(:@ttl)** return s_ivars == o_ivars && s_ivars.collect {|name| self.instance_variable_get name} == o_ivars.collect {|name| other.instance_variable_get name} end end new_record == returned_record =>true ~~~ -- https://bugs.ruby-lang.org/