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)
1111 end
1212
1313 def read_response_buffer
14- buff = String . new
14+ @ buff = String . new
1515 catch :eof do
1616 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
2020 end
2121 end
2222 buff
23+ ensure
24+ @buff = nil
2325 end
2426
2527 private
2628
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
2834 buff << ( @sock . gets ( CRLF ) or throw :eof )
2935 end
3036
31- def read_literal ( buff , literal_size )
37+ def read_literal
3238 literal = String . new ( capacity : literal_size )
3339 buff << ( @sock . read ( literal_size , literal ) or throw :eof )
40+ ensure
41+ @literal_size = nil
3442 end
3543
3644 end
Original file line number Diff line number Diff line change @@ -19,13 +19,15 @@ def literal(str) "{#{str.bytesize}}\r\n#{str}" end
1919 long_line = "tag ok #{ aaaaaaaaa } #{ aaaaaaaaa } \r \n "
2020 literal_aaaa = "* fake #{ literal aaaaaaaaa } \r \n "
2121 literal_crlf = "tag ok #{ literal many_crlfs } #{ literal many_crlfs } \r \n "
22+ zero_literal = "tag ok #{ literal "" } #{ literal "" } \r \n "
2223 illegal_crs = "tag ok #{ many_crs } #{ many_crs } \r \n "
2324 illegal_lfs = "tag ok #{ literal "\r " } \n #{ literal "\r " } \n \r \n "
2425 io = StringIO . new ( [
2526 simple ,
2627 long_line ,
2728 literal_aaaa ,
2829 literal_crlf ,
30+ zero_literal ,
2931 illegal_crs ,
3032 illegal_lfs ,
3133 simple ,
@@ -35,6 +37,7 @@ def literal(str) "{#{str.bytesize}}\r\n#{str}" end
3537 assert_equal long_line , rcvr . read_response_buffer . to_str
3638 assert_equal literal_aaaa , rcvr . read_response_buffer . to_str
3739 assert_equal literal_crlf , rcvr . read_response_buffer . to_str
40+ assert_equal zero_literal , rcvr . read_response_buffer . to_str
3841 assert_equal illegal_crs , rcvr . read_response_buffer . to_str
3942 assert_equal illegal_lfs , rcvr . read_response_buffer . to_str
4043 assert_equal simple , rcvr . read_response_buffer . to_str
You can’t perform that action at this time.
0 commit comments