Skip to content

Commit 15bf594

Browse files
committed
Read length nonblocking
1 parent a5c30dd commit 15bf594

File tree

1 file changed

+14
-1
lines changed

1 file changed

+14
-1
lines changed

lib/net/ber/ber_parser.rb

Lines changed: 14 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -137,7 +137,20 @@ def read_ber_length
137137
raise Net::BER::BerError, "Invalid BER length 0xFF detected."
138138
else
139139
v = 0
140-
read(n & 0x7f).each_byte do |b|
140+
len = n & 0x7f
141+
142+
buffer =
143+
begin
144+
read_nonblock(len)
145+
rescue IO::WaitReadable
146+
if IO.select([self], nil, nil, read_ber_timeout)
147+
read_nonblock(len)
148+
else
149+
raise Net::LDAP::LdapError, "Timed out reading from the socket"
150+
end
151+
end
152+
153+
buffer.each_byte do |b|
141154
v = (v << 8) + b
142155
end
143156

0 commit comments

Comments
 (0)