File tree Expand file tree Collapse file tree 4 files changed +41
-7
lines changed Expand file tree Collapse file tree 4 files changed +41
-7
lines changed Original file line number Diff line number Diff line change 11Unreleased Changes
22------------------
33
4+ * Issue - Add back event stream max payload size and headers length checks with a 24MB limit.
5+
461.3.1 (2025-02-13)
57------------------
68
Original file line number Diff line number Diff line change @@ -41,6 +41,12 @@ class Encoder
4141 # and 4 bytes total message crc checksum
4242 OVERHEAD_LENGTH = 16
4343
44+ # Maximum header length allowed (after encode) 128kb
45+ MAX_HEADERS_LENGTH = 1024 * 128
46+
47+ # Maximum payload length allowed (after encode) 24mb
48+ MAX_PAYLOAD_LENGTH = 1024 * 1024 * 24
49+
4450 # Encodes Aws::EventStream::Message to output IO when
4551 # provided, else return the encoded binary string
4652 #
@@ -75,6 +81,9 @@ def encode_message(message)
7581 encoded_header = encode_headers ( message )
7682 header_length = encoded_header . bytesize
7783 # encode payload
84+ if message . payload . length > MAX_PAYLOAD_LENGTH
85+ raise Aws ::EventStream ::Errors ::EventPayloadLengthExceedError . new
86+ end
7887 encoded_payload = message . payload . read
7988 total_length = header_length + encoded_payload . bytesize + OVERHEAD_LENGTH
8089
@@ -115,7 +124,10 @@ def encode_headers(message)
115124 pattern ? [ value . value ] . pack ( pattern ) : value . value ,
116125 ] . pack ( 'a*a*a*' )
117126 end
118- header_entries . join
127+ header_entries . join . tap do |encoded_header |
128+ break encoded_header if encoded_header . bytesize <= MAX_HEADERS_LENGTH
129+ raise Aws ::EventStream ::Errors ::EventHeadersLengthExceedError . new
130+ end
119131 end
120132
121133 private
Original file line number Diff line number Diff line change @@ -32,6 +32,18 @@ def initialize(*args)
3232 end
3333 end
3434
35+ class EventPayloadLengthExceedError < RuntimeError
36+ def initialize ( *args )
37+ super ( "Payload length of a message should be under 24mb." )
38+ end
39+ end
40+
41+ class EventHeadersLengthExceedError < RuntimeError
42+ def initialize ( *args )
43+ super ( "Encoded headers length of a message should be under 128kb." )
44+ end
45+ end
46+
3547 end
3648 end
3749end
Original file line number Diff line number Diff line change @@ -25,25 +25,33 @@ module EventStream
2525 expect ( test_io . string . freeze ) . to eq ( expectation )
2626 end
2727 end
28+ end
29+
30+ describe '#encode error' do
2831
29- it 'encodes large payloads' do
32+ it 'raises an error when payload exceeds' do
33+ payload = double ( 'payload' , :length => 24 * 1024 * 1024 + 1 )
3034 message = Aws ::EventStream ::Message . new (
3135 headers : { } ,
32- payload : StringIO . new ( '.' * 24 * 1024 * 1024 )
36+ payload : payload
3337 )
34- Encoder . new . encode ( message )
38+ expect {
39+ Encoder . new . encode ( message )
40+ } . to raise_error ( Aws ::EventStream ::Errors ::EventPayloadLengthExceedError )
3541 end
3642
37- it 'encodes long headers' do
43+ it 'raises an error when encoded headers exceeds ' do
3844 headers = { }
3945 headers [ 'foo' ] = Aws ::EventStream ::HeaderValue . new (
40- value : '*' * 131_073 , type : 'string'
46+ value : '*' * 131073 , type : 'string'
4147 )
4248 message = Aws ::EventStream ::Message . new (
4349 headers : headers ,
4450 payload : StringIO . new
4551 )
46- Encoder . new . encode ( message )
52+ expect {
53+ Encoder . new . encode ( message )
54+ } . to raise_error ( Aws ::EventStream ::Errors ::EventHeadersLengthExceedError )
4755
4856 end
4957
You can’t perform that action at this time.
0 commit comments