Skip to content

Commit dfbd598

Browse files
authored
Merge pull request #169 from GooDer/master
Fixed maximum length of route metadata
2 parents a52893e + 3612207 commit dfbd598

File tree

2 files changed

+39
-4
lines changed

2 files changed

+39
-4
lines changed

rsocket/extensions/tagging.py

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -25,10 +25,10 @@ def _serialize_tags(self) -> bytes:
2525
serialized = b''
2626

2727
for tag in list(map(ensure_bytes, self.tags)):
28-
if len(tag) > 256:
29-
raise RSocketError('Tag length longer than 256 characters: "%s"' % tag)
28+
if len(tag) > 255:
29+
raise RSocketError('Tag length longer than 255 characters: "%s"' % tag)
3030

31-
serialized += struct.pack('>b', len(tag))
31+
serialized += struct.pack('>B', len(tag))
3232
serialized += tag
3333

3434
return serialized
@@ -38,7 +38,7 @@ def parse(self, buffer: bytes):
3838
offset = 0
3939

4040
while offset < len(buffer):
41-
tag_length = struct.unpack('>b', buffer[offset:offset + 1])[0]
41+
tag_length = struct.unpack('>B', buffer[offset:offset + 1])[0]
4242
offset += 1
4343
self.tags.append(buffer[offset:offset + tag_length])
4444
offset += tag_length

tests/rsocket/test_extentions.py

Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,11 @@
1+
import pytest
2+
import struct
3+
4+
from rsocket.exceptions import RSocketError
15
from rsocket.extensions.authentication import AuthenticationBearer, AuthenticationSimple
6+
from rsocket.extensions.mimetypes import WellKnownMimeTypes
27
from rsocket.extensions.routing import RoutingMetadata
8+
from rsocket.extensions.tagging import TaggingMetadata
39

410

511
def test_authentication_bearer():
@@ -39,3 +45,32 @@ def test_routing():
3945
parsed.parse(data)
4046

4147
assert parsed == routing
48+
49+
50+
def test_tagging_metadata_serialize_max_length():
51+
tag = 's' * 255
52+
meta = TaggingMetadata(WellKnownMimeTypes.MESSAGE_RSOCKET_ROUTING, [tag])
53+
54+
serialized = meta.serialize()
55+
56+
length = struct.pack('>B', len(tag))
57+
assert length + bytes(tag, 'utf-8') == serialized
58+
59+
60+
def test_tagging_metadata_serialize_exception_length():
61+
tag = 's' * 256
62+
meta = TaggingMetadata(WellKnownMimeTypes.MESSAGE_RSOCKET_ROUTING, [tag])
63+
64+
with pytest.raises(RSocketError) as e_info:
65+
meta.serialize()
66+
67+
assert e_info.match(f'Tag length longer than 255 characters: "b\'{tag}\'"')
68+
69+
70+
def test_tagging_metadata_parse():
71+
meta = TaggingMetadata(WellKnownMimeTypes.MESSAGE_RSOCKET_ROUTING)
72+
tag = 's' * 255
73+
length = struct.pack('>B', len(tag))
74+
75+
meta.parse(length + bytes(tag, 'utf-8'))
76+
assert tag == meta.tags[0].decode()

0 commit comments

Comments
 (0)