File tree Expand file tree Collapse file tree 2 files changed +17
-6
lines changed Expand file tree Collapse file tree 2 files changed +17
-6
lines changed Original file line number Diff line number Diff line change @@ -11,26 +11,34 @@ def initialize(client, sock)
11
11
end
12
12
13
13
def read_response_buffer
14
- buff = String . new
14
+ @ buff = String . new
15
15
catch :eof do
16
16
while true
17
- read_line ( buff )
18
- break unless / \{ ( \d +) \} \r \n \z /n =~ buff
19
- read_literal ( buff , $1 . to_i )
17
+ read_line
18
+ break unless ( @literal_size = get_literal_size )
19
+ read_literal
20
20
end
21
21
end
22
22
buff
23
+ ensure
24
+ @buff = nil
23
25
end
24
26
25
27
private
26
28
27
- def read_line ( buff )
29
+ attr_reader :buff , :literal_size
30
+
31
+ def get_literal_size = /\{ (\d +)\} \r \n \z /n =~ buff && $1. to_i
32
+
33
+ def read_line
28
34
buff << ( @sock . gets ( CRLF ) or throw :eof )
29
35
end
30
36
31
- def read_literal ( buff , literal_size )
37
+ def read_literal
32
38
literal = String . new ( capacity : literal_size )
33
39
buff << ( @sock . read ( literal_size , literal ) or throw :eof )
40
+ ensure
41
+ @literal_size = nil
34
42
end
35
43
36
44
end
Original file line number Diff line number Diff line change @@ -19,13 +19,15 @@ def literal(str) "{#{str.bytesize}}\r\n#{str}" end
19
19
long_line = "tag ok #{ aaaaaaaaa } #{ aaaaaaaaa } \r \n "
20
20
literal_aaaa = "* fake #{ literal aaaaaaaaa } \r \n "
21
21
literal_crlf = "tag ok #{ literal many_crlfs } #{ literal many_crlfs } \r \n "
22
+ zero_literal = "tag ok #{ literal "" } #{ literal "" } \r \n "
22
23
illegal_crs = "tag ok #{ many_crs } #{ many_crs } \r \n "
23
24
illegal_lfs = "tag ok #{ literal "\r " } \n #{ literal "\r " } \n \r \n "
24
25
io = StringIO . new ( [
25
26
simple ,
26
27
long_line ,
27
28
literal_aaaa ,
28
29
literal_crlf ,
30
+ zero_literal ,
29
31
illegal_crs ,
30
32
illegal_lfs ,
31
33
simple ,
@@ -35,6 +37,7 @@ def literal(str) "{#{str.bytesize}}\r\n#{str}" end
35
37
assert_equal long_line , rcvr . read_response_buffer . to_str
36
38
assert_equal literal_aaaa , rcvr . read_response_buffer . to_str
37
39
assert_equal literal_crlf , rcvr . read_response_buffer . to_str
40
+ assert_equal zero_literal , rcvr . read_response_buffer . to_str
38
41
assert_equal illegal_crs , rcvr . read_response_buffer . to_str
39
42
assert_equal illegal_lfs , rcvr . read_response_buffer . to_str
40
43
assert_equal simple , rcvr . read_response_buffer . to_str
You can’t perform that action at this time.
0 commit comments