@@ -55,13 +55,33 @@ def literal(str) = "{#{str.bytesize}}\r\n#{str}"
5555 client . config . max_response_size = 10
5656 under = "+ 3456\r \n "
5757 exact = "+ 345678\r \n "
58- over = "+ 3456789\r \n "
59- io = StringIO . new ( [ under , exact , over ] . join )
58+ very_over = "+ 3456789 #{ ?a * ( 16 <<10 ) } }\r \n "
59+ slightly_over = "+ 34567890\r \n " # CRLF after the limit
60+ io = StringIO . new ( [ under , exact , very_over , slightly_over ] . join )
6061 rcvr = Net ::IMAP ::ResponseReader . new ( client , io )
6162 assert_equal under , rcvr . read_response_buffer . to_str
6263 assert_equal exact , rcvr . read_response_buffer . to_str
6364 assert_raise Net ::IMAP ::ResponseTooLargeError do
64- rcvr . read_response_buffer
65+ result = rcvr . read_response_buffer
66+ flunk "Got result: %p" % [ result ]
67+ end
68+ io = StringIO . new ( slightly_over )
69+ rcvr = Net ::IMAP ::ResponseReader . new ( client , io )
70+ assert_raise Net ::IMAP ::ResponseTooLargeError do
71+ result = rcvr . read_response_buffer
72+ flunk "Got result: %p" % [ result ]
73+ end
74+ end
75+
76+ test "#read_response_buffer max_response_size straddling CRLF" do
77+ barely_over = "+ 3456789\r \n " # CRLF straddles the boundary
78+ client = FakeClient . new
79+ client . config . max_response_size = 10
80+ io = StringIO . new ( barely_over )
81+ rcvr = Net ::IMAP ::ResponseReader . new ( client , io )
82+ assert_raise Net ::IMAP ::ResponseTooLargeError do
83+ result = rcvr . read_response_buffer
84+ flunk "Got result: %p" % [ result ]
6585 end
6686 end
6787
0 commit comments