aws-eventstream 1.3.2 → 1.4.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/CHANGELOG.md +11 -0
- data/VERSION +1 -1
- data/lib/aws-eventstream/encoder.rb +39 -1
- data/lib/aws-eventstream/errors.rb +21 -0
- metadata +4 -8
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: ab51070b934f6cc24b6221b958d85de7e6385b00e1807c439ffb2c1c724d024b
|
|
4
|
+
data.tar.gz: 7768dae84ea125d169529dffe424543493d10a3555176f2c47a60d193633849a
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: d5d7379e1df312197bd26c0790052645830901171a1c39a4602b41cf573cac527399e77452d5c33b9d8f9c5d2a458fce20500a8ed8a6f56611f2775bd1729594
|
|
7
|
+
data.tar.gz: f69606e1b8880d6d52085cc13164b2fe7856cbe4f2b994db6a347b7b8201e62a58904de2514467759b45fe7491ea7bcb5d6b42ae746bb40afeca7b4c523cb464
|
data/CHANGELOG.md
CHANGED
|
@@ -1,6 +1,17 @@
|
|
|
1
1
|
Unreleased Changes
|
|
2
2
|
------------------
|
|
3
3
|
|
|
4
|
+
1.4.1 (2026-10-21)
|
|
5
|
+
------------------
|
|
6
|
+
|
|
7
|
+
* Issue - Raise an error when event stream header names or values exceed supported byte-length limits.
|
|
8
|
+
* Issue - Raise an error when a fixed-width event stream header value does not fit its type's width.
|
|
9
|
+
|
|
10
|
+
1.4.0 (2025-06-02)
|
|
11
|
+
------------------
|
|
12
|
+
|
|
13
|
+
* Feature - AWS SDK for Ruby no longer supports Ruby runtime versions 2.5 and 2.6.
|
|
14
|
+
|
|
4
15
|
1.3.2 (2025-03-06)
|
|
5
16
|
------------------
|
|
6
17
|
|
data/VERSION
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
1.
|
|
1
|
+
1.4.1
|
|
@@ -41,6 +41,14 @@ module Aws
|
|
|
41
41
|
# and 4 bytes total message crc checksum
|
|
42
42
|
OVERHEAD_LENGTH = 16
|
|
43
43
|
|
|
44
|
+
# Maximum encoded length of a single header name (1-byte unsigned length field)
|
|
45
|
+
MAX_HEADER_NAME_LENGTH = 255
|
|
46
|
+
|
|
47
|
+
# Maximum encoded length of a string/bytes header value. The length field is two bytes
|
|
48
|
+
# (and could hold 65,535), but the protocol caps the value at the signed 16-bit maximum
|
|
49
|
+
# (INT16_MAX, 2**15 - 1), so the encoder must enforce the lower limit.
|
|
50
|
+
MAX_HEADER_VALUE_LENGTH = 32_767
|
|
51
|
+
|
|
44
52
|
# Maximum header length allowed (after encode) 128kb
|
|
45
53
|
MAX_HEADERS_LENGTH = 1024 * 128
|
|
46
54
|
|
|
@@ -109,6 +117,9 @@ module Aws
|
|
|
109
117
|
# @return [String]
|
|
110
118
|
def encode_headers(message)
|
|
111
119
|
header_entries = message.headers.map do |key, value|
|
|
120
|
+
if key.bytesize > MAX_HEADER_NAME_LENGTH
|
|
121
|
+
raise Aws::EventStream::Errors::EventHeaderNameLengthExceedError.new
|
|
122
|
+
end
|
|
112
123
|
encoded_key = [key.bytesize, key].pack('Ca*')
|
|
113
124
|
|
|
114
125
|
# header value
|
|
@@ -116,7 +127,15 @@ module Aws
|
|
|
116
127
|
encoded_value = [type_index].pack('C')
|
|
117
128
|
# boolean types doesn't need to specify value
|
|
118
129
|
next [encoded_key, encoded_value].pack('a*a*') if !!pattern == pattern
|
|
119
|
-
|
|
130
|
+
validate_fixed_width_value!(value, value_length) if value_length
|
|
131
|
+
unless value_length
|
|
132
|
+
# string and bytes types carry a 2-byte length prefix capped at INT16_MAX; reject
|
|
133
|
+
# oversized values rather than letting bytesize wrap mod 65536.
|
|
134
|
+
if value.value.bytesize > MAX_HEADER_VALUE_LENGTH
|
|
135
|
+
raise Aws::EventStream::Errors::EventHeaderValueLengthExceedError.new
|
|
136
|
+
end
|
|
137
|
+
encoded_value = [encoded_value, value.value.bytesize].pack('a*S>')
|
|
138
|
+
end
|
|
120
139
|
|
|
121
140
|
[
|
|
122
141
|
encoded_key,
|
|
@@ -132,6 +151,25 @@ module Aws
|
|
|
132
151
|
|
|
133
152
|
private
|
|
134
153
|
|
|
154
|
+
# Fixed-width values carry no length prefix, so a value that does not fit its
|
|
155
|
+
# protocol width would either be silently truncated by #pack (integers) or
|
|
156
|
+
# misalign the header block (uuid). Reject both before anything is written.
|
|
157
|
+
def validate_fixed_width_value!(value, width)
|
|
158
|
+
v = value.value
|
|
159
|
+
valid =
|
|
160
|
+
if value.type == 'uuid'
|
|
161
|
+
v.respond_to?(:bytesize) && v.bytesize == width
|
|
162
|
+
elsif v.is_a?(Integer)
|
|
163
|
+
limit = 1 << (width * 8 - 1)
|
|
164
|
+
v >= -limit && v < limit
|
|
165
|
+
else
|
|
166
|
+
true
|
|
167
|
+
end
|
|
168
|
+
return if valid
|
|
169
|
+
|
|
170
|
+
raise Aws::EventStream::Errors::EventHeaderValueWidthError.new(value.type)
|
|
171
|
+
end
|
|
172
|
+
|
|
135
173
|
def encode_prelude(total_length, headers_length)
|
|
136
174
|
prelude_body = [total_length, headers_length].pack('NN')
|
|
137
175
|
checksum = Zlib.crc32(prelude_body)
|
|
@@ -44,6 +44,27 @@ module Aws
|
|
|
44
44
|
end
|
|
45
45
|
end
|
|
46
46
|
|
|
47
|
+
# Raised when an encoded header name exceeds the 255-byte protocol limit
|
|
48
|
+
class EventHeaderNameLengthExceedError < RuntimeError
|
|
49
|
+
def initialize(*args)
|
|
50
|
+
super("Encoded header name length should be under 256 bytes.")
|
|
51
|
+
end
|
|
52
|
+
end
|
|
53
|
+
|
|
54
|
+
# Raised when an encoded header value exceeds the 32767-byte (INT16_MAX) protocol limit
|
|
55
|
+
class EventHeaderValueLengthExceedError < RuntimeError
|
|
56
|
+
def initialize(*args)
|
|
57
|
+
super("Encoded header value length should be under 32768 bytes.")
|
|
58
|
+
end
|
|
59
|
+
end
|
|
60
|
+
|
|
61
|
+
# Raised when a fixed-width header value does not fit its protocol width
|
|
62
|
+
class EventHeaderValueWidthError < RuntimeError
|
|
63
|
+
def initialize(type = nil, *args)
|
|
64
|
+
super("Header value does not fit the fixed width of header type '#{type}'.")
|
|
65
|
+
end
|
|
66
|
+
end
|
|
67
|
+
|
|
47
68
|
end
|
|
48
69
|
end
|
|
49
70
|
end
|
metadata
CHANGED
|
@@ -1,18 +1,16 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: aws-eventstream
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 1.
|
|
4
|
+
version: 1.4.1
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Amazon Web Services
|
|
8
|
-
autorequire:
|
|
9
8
|
bindir: bin
|
|
10
9
|
cert_chain: []
|
|
11
|
-
date:
|
|
10
|
+
date: 1980-01-02 00:00:00.000000000 Z
|
|
12
11
|
dependencies: []
|
|
13
12
|
description: Amazon Web Services event stream library. Decodes and encodes binary
|
|
14
13
|
stream under `vnd.amazon.event-stream` content-type
|
|
15
|
-
email:
|
|
16
14
|
executables: []
|
|
17
15
|
extensions: []
|
|
18
16
|
extra_rdoc_files: []
|
|
@@ -33,7 +31,6 @@ licenses:
|
|
|
33
31
|
metadata:
|
|
34
32
|
source_code_uri: https://github.com/aws/aws-sdk-ruby/tree/version-3/gems/aws-eventstream
|
|
35
33
|
changelog_uri: https://github.com/aws/aws-sdk-ruby/tree/version-3/gems/aws-eventstream/CHANGELOG.md
|
|
36
|
-
post_install_message:
|
|
37
34
|
rdoc_options: []
|
|
38
35
|
require_paths:
|
|
39
36
|
- lib
|
|
@@ -41,15 +38,14 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
|
41
38
|
requirements:
|
|
42
39
|
- - ">="
|
|
43
40
|
- !ruby/object:Gem::Version
|
|
44
|
-
version: '2.
|
|
41
|
+
version: '2.7'
|
|
45
42
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
|
46
43
|
requirements:
|
|
47
44
|
- - ">="
|
|
48
45
|
- !ruby/object:Gem::Version
|
|
49
46
|
version: '0'
|
|
50
47
|
requirements: []
|
|
51
|
-
rubygems_version: 3.
|
|
52
|
-
signing_key:
|
|
48
|
+
rubygems_version: 3.6.7
|
|
53
49
|
specification_version: 4
|
|
54
50
|
summary: AWS Event Stream Library
|
|
55
51
|
test_files: []
|