diff --git a/Contributors.rdoc b/Contributors.rdoc index b3b25ff6..e40b20db 100644 --- a/Contributors.rdoc +++ b/Contributors.rdoc @@ -21,3 +21,4 @@ Contributions since: * nowhereman * David J. Lee (DavidJLee) * Cody Cutrer (ccutrer) +* WoodsBagotAndreMarquesLee diff --git a/lib/net/ldap/connection.rb b/lib/net/ldap/connection.rb index 0e3d7e05..7ed0bdb5 100644 --- a/lib/net/ldap/connection.rb +++ b/lib/net/ldap/connection.rb @@ -571,12 +571,13 @@ def search(args = nil) result_pdu || OpenStruct.new(:status => :failure, :result_code => Net::LDAP::ResultCodeOperationsError, :message => "Invalid search") end # instrument ensure + # clean up message queue for this search messages = message_queue.delete(message_id) # in the exceptional case some messages were *not* consumed from the queue, # instrument the event but do not fail. - unless messages.empty? + if !messages.nil? && !messages.empty? instrument "search_messages_unread.net_ldap_connection", message_id: message_id, messages: messages end diff --git a/lib/net/ldap/filter.rb b/lib/net/ldap/filter.rb index 2c5da3fa..4f5da3e5 100644 --- a/lib/net/ldap/filter.rb +++ b/lib/net/ldap/filter.rb @@ -645,9 +645,8 @@ def match(entry) ## # Converts escaped characters (e.g., "\\28") to unescaped characters - # ("("). def unescape(right) - right.gsub(/\\([a-fA-F\d]{2})/) { [$1.hex].pack("U") } + right.to_s.gsub(/\\([a-fA-F\d]{2})/) { [$1.hex].pack("U") } end private :unescape diff --git a/test/test_filter.rb b/test/test_filter.rb index eb6192d0..139612a1 100644 --- a/test/test_filter.rb +++ b/test/test_filter.rb @@ -215,4 +215,9 @@ def test_parse_ber_escapes_characters filter = Net::LDAP::Filter.parse_ber(ber.read_ber(Net::LDAP::AsnSyntax)) assert_equal "(objectclass=#{escaped}*#{escaped}*#{escaped})", filter.to_s end + + def test_unescape_fixnums + filter = Net::LDAP::Filter.eq("objectclass", 3) + assert_equal "\xA3\x10\x04\vobjectclass\x04\x013".b, filter.to_ber + end end