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 1
1
Unreleased Changes
2
2
------------------
3
3
4
+ * Issue - Add back event stream max payload size and headers length checks with a 24MB limit.
5
+
4
6
1.3.1 (2025-02-13)
5
7
------------------
6
8
Original file line number Diff line number Diff line change @@ -41,6 +41,12 @@ class Encoder
41
41
# and 4 bytes total message crc checksum
42
42
OVERHEAD_LENGTH = 16
43
43
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
+
44
50
# Encodes Aws::EventStream::Message to output IO when
45
51
# provided, else return the encoded binary string
46
52
#
@@ -75,6 +81,9 @@ def encode_message(message)
75
81
encoded_header = encode_headers ( message )
76
82
header_length = encoded_header . bytesize
77
83
# encode payload
84
+ if message . payload . length > MAX_PAYLOAD_LENGTH
85
+ raise Aws ::EventStream ::Errors ::EventPayloadLengthExceedError . new
86
+ end
78
87
encoded_payload = message . payload . read
79
88
total_length = header_length + encoded_payload . bytesize + OVERHEAD_LENGTH
80
89
@@ -115,7 +124,10 @@ def encode_headers(message)
115
124
pattern ? [ value . value ] . pack ( pattern ) : value . value ,
116
125
] . pack ( 'a*a*a*' )
117
126
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
119
131
end
120
132
121
133
private
Original file line number Diff line number Diff line change @@ -32,6 +32,18 @@ def initialize(*args)
32
32
end
33
33
end
34
34
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
+
35
47
end
36
48
end
37
49
end
Original file line number Diff line number Diff line change @@ -25,25 +25,33 @@ module EventStream
25
25
expect ( test_io . string . freeze ) . to eq ( expectation )
26
26
end
27
27
end
28
+ end
29
+
30
+ describe '#encode error' do
28
31
29
- it 'encodes large payloads' do
32
+ it 'raises an error when payload exceeds' do
33
+ payload = double ( 'payload' , :length => 24 * 1024 * 1024 + 1 )
30
34
message = Aws ::EventStream ::Message . new (
31
35
headers : { } ,
32
- payload : StringIO . new ( '.' * 24 * 1024 * 1024 )
36
+ payload : payload
33
37
)
34
- Encoder . new . encode ( message )
38
+ expect {
39
+ Encoder . new . encode ( message )
40
+ } . to raise_error ( Aws ::EventStream ::Errors ::EventPayloadLengthExceedError )
35
41
end
36
42
37
- it 'encodes long headers' do
43
+ it 'raises an error when encoded headers exceeds ' do
38
44
headers = { }
39
45
headers [ 'foo' ] = Aws ::EventStream ::HeaderValue . new (
40
- value : '*' * 131_073 , type : 'string'
46
+ value : '*' * 131073 , type : 'string'
41
47
)
42
48
message = Aws ::EventStream ::Message . new (
43
49
headers : headers ,
44
50
payload : StringIO . new
45
51
)
46
- Encoder . new . encode ( message )
52
+ expect {
53
+ Encoder . new . encode ( message )
54
+ } . to raise_error ( Aws ::EventStream ::Errors ::EventHeadersLengthExceedError )
47
55
48
56
end
49
57
You can’t perform that action at this time.
0 commit comments