Skip to content

Commit cc2ba71

Browse files
mtoddJohn Wedoff
authored andcommitted
Extract read_ber_nonblock, use for all reads
1 parent 22197b4 commit cc2ba71

File tree

1 file changed

+16
-16
lines changed

1 file changed

+16
-16
lines changed

lib/net/ber/ber_parser.rb

Lines changed: 16 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -146,23 +146,9 @@ def read_ber_length
146146
raise Net::BER::BerError, "Invalid BER length 0xFF detected."
147147
else
148148
v = 0
149-
len = n & 0x7f
150-
151-
buffer =
152-
begin
153-
read_nonblock(len)
154-
rescue IO::WaitReadable
155-
if IO.select([self], nil, nil, read_ber_timeout)
156-
read_nonblock(len)
157-
else
158-
raise Net::LDAP::LdapError, "Timed out reading from the socket"
159-
end
160-
end
161-
162-
buffer.each_byte do |b|
149+
read_ber_nonblock(n & 0x7f).each_byte do |b|
163150
v = (v << 8) + b
164151
end
165-
166152
v
167153
end
168154
end
@@ -191,7 +177,7 @@ def read_ber(syntax = nil)
191177
raise Net::BER::BerError,
192178
"Indeterminite BER content length not implemented."
193179
end
194-
data = read(content_length)
180+
data = read_ber_nonblock(content_length)
195181

196182
parse_ber_object(syntax, id, data)
197183
end
@@ -218,4 +204,18 @@ def getbyte_nonblock
218204
nil
219205
end
220206
private :getbyte_nonblock
207+
208+
# Internal: Read `len` bytes, respecting timeout.
209+
def read_ber_nonblock(len)
210+
begin
211+
read_nonblock(len)
212+
rescue IO::WaitReadable
213+
if IO.select([self], nil, nil, read_ber_timeout)
214+
read_nonblock(len)
215+
else
216+
raise Net::LDAP::LdapError, "Timed out reading from the socket"
217+
end
218+
end
219+
end
220+
private :read_ber_nonblock
221221
end

0 commit comments

Comments
 (0)