Skip to content

Commit 59d8ae9

Browse files
committed
Merge pull request #184 from ruby-ldap/rebase-168-nil-guard-numeric-unescape
Rebase #168: Connection#unescape handles numerics, #search guards against nil queued_reads
2 parents 876a50e + 82bf312 commit 59d8ae9

File tree

4 files changed

+9
-3
lines changed

4 files changed

+9
-3
lines changed

Contributors.rdoc

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,3 +21,4 @@ Contributions since:
2121
* nowhereman
2222
* David J. Lee (DavidJLee)
2323
* Cody Cutrer (ccutrer)
24+
* WoodsBagotAndreMarquesLee

lib/net/ldap/connection.rb

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -571,12 +571,13 @@ def search(args = nil)
571571
result_pdu || OpenStruct.new(:status => :failure, :result_code => Net::LDAP::ResultCodeOperationsError, :message => "Invalid search")
572572
end # instrument
573573
ensure
574+
574575
# clean up message queue for this search
575576
messages = message_queue.delete(message_id)
576577

577578
# in the exceptional case some messages were *not* consumed from the queue,
578579
# instrument the event but do not fail.
579-
unless messages.empty?
580+
if !messages.nil? && !messages.empty?
580581
instrument "search_messages_unread.net_ldap_connection",
581582
message_id: message_id, messages: messages
582583
end

lib/net/ldap/filter.rb

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -645,9 +645,8 @@ def match(entry)
645645

646646
##
647647
# Converts escaped characters (e.g., "\\28") to unescaped characters
648-
# ("(").
649648
def unescape(right)
650-
right.gsub(/\\([a-fA-F\d]{2})/) { [$1.hex].pack("U") }
649+
right.to_s.gsub(/\\([a-fA-F\d]{2})/) { [$1.hex].pack("U") }
651650
end
652651
private :unescape
653652

test/test_filter.rb

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -215,4 +215,9 @@ def test_parse_ber_escapes_characters
215215
filter = Net::LDAP::Filter.parse_ber(ber.read_ber(Net::LDAP::AsnSyntax))
216216
assert_equal "(objectclass=#{escaped}*#{escaped}*#{escaped})", filter.to_s
217217
end
218+
219+
def test_unescape_fixnums
220+
filter = Net::LDAP::Filter.eq("objectclass", 3)
221+
assert_equal "\xA3\x10\x04\vobjectclass\x04\x013".b, filter.to_ber
222+
end
218223
end

0 commit comments

Comments
 (0)