File tree 2 files changed +17
-6
lines changed
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 @@ -24,13 +24,15 @@ def literal(str) = "{#{str.bytesize}}\r\n#{str}"
24
24
long_line = "tag ok #{ aaaaaaaaa } #{ aaaaaaaaa } \r \n "
25
25
literal_aaaa = "* fake #{ literal aaaaaaaaa } \r \n "
26
26
literal_crlf = "tag ok #{ literal many_crlfs } #{ literal many_crlfs } \r \n "
27
+ zero_literal = "tag ok #{ literal "" } #{ literal "" } \r \n "
27
28
illegal_crs = "tag ok #{ many_crs } #{ many_crs } \r \n "
28
29
illegal_lfs = "tag ok #{ literal "\r " } \n #{ literal "\r " } \n \r \n "
29
30
io = StringIO . new ( [
30
31
simple ,
31
32
long_line ,
32
33
literal_aaaa ,
33
34
literal_crlf ,
35
+ zero_literal ,
34
36
illegal_crs ,
35
37
illegal_lfs ,
36
38
simple ,
@@ -40,6 +42,7 @@ def literal(str) = "{#{str.bytesize}}\r\n#{str}"
40
42
assert_equal long_line , rcvr . read_response_buffer . to_str
41
43
assert_equal literal_aaaa , rcvr . read_response_buffer . to_str
42
44
assert_equal literal_crlf , rcvr . read_response_buffer . to_str
45
+ assert_equal zero_literal , rcvr . read_response_buffer . to_str
43
46
assert_equal illegal_crs , rcvr . read_response_buffer . to_str
44
47
assert_equal illegal_lfs , rcvr . read_response_buffer . to_str
45
48
assert_equal simple , rcvr . read_response_buffer . to_str
You can’t perform that action at this time.
0 commit comments