Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
A
Actor Framework
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Operations
Operations
Metrics
Environments
Analytics
Analytics
CI / CD
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
cpp-libs
Actor Framework
Commits
5eb49e3e
Commit
5eb49e3e
authored
Jun 23, 2023
by
Dominik Charousset
Browse files
Options
Browse Files
Download
Plain Diff
Merge pull request #1454
parents
8b56b9c2
01361be2
Changes
3
Show whitespace changes
Inline
Side-by-side
Showing
3 changed files
with
116 additions
and
1 deletion
+116
-1
CHANGELOG.md
CHANGELOG.md
+1
-0
libcaf_net/src/detail/rfc6455.cpp
libcaf_net/src/detail/rfc6455.cpp
+1
-1
libcaf_net/test/detail/rfc6455.cpp
libcaf_net/test/detail/rfc6455.cpp
+114
-0
No files found.
CHANGELOG.md
View file @
5eb49e3e
...
@@ -32,6 +32,7 @@ is based on [Keep a Changelog](https://keepachangelog.com).
...
@@ -32,6 +32,7 @@ is based on [Keep a Changelog](https://keepachangelog.com).
-
Fix build errors with exceptions disabled.
-
Fix build errors with exceptions disabled.
-
Fix a regression in
`--dump-config`
that caused CAF applications to emit
-
Fix a regression in
`--dump-config`
that caused CAF applications to emit
malformed output.
malformed output.
-
Fix handling of WebSocket frames that are exactly on the 65535 byte limit.
## [0.19.2] - 2023-06-13
## [0.19.2] - 2023-06-13
...
...
libcaf_net/src/detail/rfc6455.cpp
View file @
5eb49e3e
...
@@ -45,7 +45,7 @@ void rfc6455::assemble_frame(uint8_t opcode, uint32_t mask_key,
...
@@ -45,7 +45,7 @@ void rfc6455::assemble_frame(uint8_t opcode, uint32_t mask_key,
if
(
data
.
size
()
<
126
)
{
if
(
data
.
size
()
<
126
)
{
auto
len
=
static_cast
<
uint8_t
>
(
data
.
size
());
auto
len
=
static_cast
<
uint8_t
>
(
data
.
size
());
out
.
push_back
(
mask_bit
|
std
::
byte
{
len
});
out
.
push_back
(
mask_bit
|
std
::
byte
{
len
});
}
else
if
(
data
.
size
()
<
std
::
numeric_limits
<
uint16_t
>::
max
())
{
}
else
if
(
data
.
size
()
<
=
std
::
numeric_limits
<
uint16_t
>::
max
())
{
auto
len
=
static_cast
<
uint16_t
>
(
data
.
size
());
auto
len
=
static_cast
<
uint16_t
>
(
data
.
size
());
auto
no_len
=
to_network_order
(
len
);
auto
no_len
=
to_network_order
(
len
);
std
::
byte
len_data
[
2
];
std
::
byte
len_data
[
2
];
...
...
libcaf_net/test/detail/rfc6455.cpp
View file @
5eb49e3e
...
@@ -60,6 +60,40 @@ CAF_TEST(masking) {
...
@@ -60,6 +60,40 @@ CAF_TEST(masking) {
CAF_CHECK_EQUAL
(
masked_data
,
data
);
CAF_CHECK_EQUAL
(
masked_data
,
data
);
}
}
CAF_TEST
(
no
mask
key
and
no
data
)
{
std
::
vector
<
uint8_t
>
data
{};
byte_buffer
out
;
impl
::
assemble_frame
(
impl
::
binary_frame
,
0
,
as_bytes
(
make_span
(
data
)),
out
);
CAF_CHECK_EQUAL
(
out
,
bytes
({
0x82
,
// FIN + binary frame opcode
0x00
,
// data size = 0
}));
impl
::
header
hdr
;
CAF_CHECK_EQUAL
(
impl
::
decode_header
(
out
,
hdr
),
2
);
CAF_CHECK_EQUAL
(
hdr
.
fin
,
true
);
CAF_CHECK_EQUAL
(
hdr
.
mask_key
,
0u
);
CAF_CHECK_EQUAL
(
hdr
.
opcode
,
impl
::
binary_frame
);
CAF_CHECK_EQUAL
(
hdr
.
payload_len
,
data
.
size
());
}
CAF_TEST
(
valid
mask
key
and
no
data
)
{
std
::
vector
<
uint8_t
>
data
{};
byte_buffer
out
;
impl
::
assemble_frame
(
impl
::
binary_frame
,
0xDEADC0DE
,
as_bytes
(
make_span
(
data
)),
out
);
CAF_CHECK_EQUAL
(
out
,
bytes
({
0x82
,
// FIN + binary frame opcode
0x80
,
// MASKED + data size = 0
0xDE
,
0xAD
,
0xC0
,
0xDE
,
// mask key,
}));
impl
::
header
hdr
;
CAF_CHECK_EQUAL
(
impl
::
decode_header
(
out
,
hdr
),
6
);
CAF_CHECK_EQUAL
(
hdr
.
fin
,
true
);
CAF_CHECK_EQUAL
(
hdr
.
mask_key
,
0xDEADC0DEu
);
CAF_CHECK_EQUAL
(
hdr
.
opcode
,
impl
::
binary_frame
);
CAF_CHECK_EQUAL
(
hdr
.
payload_len
,
data
.
size
());
}
CAF_TEST
(
no
mask
key
plus
small
data
)
{
CAF_TEST
(
no
mask
key
plus
small
data
)
{
std
::
vector
<
uint8_t
>
data
{
0x12
,
0x34
,
0x45
,
0x67
};
std
::
vector
<
uint8_t
>
data
{
0x12
,
0x34
,
0x45
,
0x67
};
byte_buffer
out
;
byte_buffer
out
;
...
@@ -96,6 +130,44 @@ CAF_TEST(valid mask key plus small data) {
...
@@ -96,6 +130,44 @@ CAF_TEST(valid mask key plus small data) {
CAF_CHECK_EQUAL
(
hdr
.
payload_len
,
data
.
size
());
CAF_CHECK_EQUAL
(
hdr
.
payload_len
,
data
.
size
());
}
}
CAF_TEST
(
no
mask
key
plus
upper
bound
on
small
data
)
{
std
::
vector
<
uint8_t
>
data
;
data
.
resize
(
125
,
0xFF
);
byte_buffer
out
;
impl
::
assemble_frame
(
impl
::
binary_frame
,
0
,
as_bytes
(
make_span
(
data
)),
out
);
CAF_CHECK_EQUAL
(
take
(
out
,
6
),
bytes
({
0x82
,
// FIN + binary frame opcode
0x7D
,
// data size = 125
0xFF
,
0xFF
,
0xFF
,
0xFF
,
// masked data
}));
impl
::
header
hdr
;
CAF_CHECK_EQUAL
(
impl
::
decode_header
(
out
,
hdr
),
2
);
CAF_CHECK_EQUAL
(
hdr
.
fin
,
true
);
CAF_CHECK_EQUAL
(
hdr
.
mask_key
,
0u
);
CAF_CHECK_EQUAL
(
hdr
.
opcode
,
impl
::
binary_frame
);
CAF_CHECK_EQUAL
(
hdr
.
payload_len
,
data
.
size
());
}
CAF_TEST
(
valid
mask
key
plus
upper
bound
on
small
data
)
{
std
::
vector
<
uint8_t
>
data
;
data
.
resize
(
125
,
0xFF
);
byte_buffer
out
;
impl
::
assemble_frame
(
impl
::
binary_frame
,
0xDEADC0DE
,
as_bytes
(
make_span
(
data
)),
out
);
CAF_CHECK_EQUAL
(
take
(
out
,
10
),
bytes
({
0x82
,
// FIN + binary frame opcode
0xFD
,
// MASKED + data size = 125
0xDE
,
0xAD
,
0xC0
,
0xDE
,
// mask key,
0xFF
,
0xFF
,
0xFF
,
0xFF
,
// masked data
}));
impl
::
header
hdr
;
CAF_CHECK_EQUAL
(
impl
::
decode_header
(
out
,
hdr
),
6
);
CAF_CHECK_EQUAL
(
hdr
.
fin
,
true
);
CAF_CHECK_EQUAL
(
hdr
.
mask_key
,
0xDEADC0DEu
);
CAF_CHECK_EQUAL
(
hdr
.
opcode
,
impl
::
binary_frame
);
CAF_CHECK_EQUAL
(
hdr
.
payload_len
,
data
.
size
());
}
CAF_TEST
(
no
mask
key
plus
medium
data
)
{
CAF_TEST
(
no
mask
key
plus
medium
data
)
{
std
::
vector
<
uint8_t
>
data
;
std
::
vector
<
uint8_t
>
data
;
data
.
insert
(
data
.
end
(),
126
,
0xFF
);
data
.
insert
(
data
.
end
(),
126
,
0xFF
);
...
@@ -138,6 +210,48 @@ CAF_TEST(valid mask key plus medium data) {
...
@@ -138,6 +210,48 @@ CAF_TEST(valid mask key plus medium data) {
CAF_CHECK_EQUAL
(
hdr
.
payload_len
,
data
.
size
());
CAF_CHECK_EQUAL
(
hdr
.
payload_len
,
data
.
size
());
}
}
CAF_TEST
(
no
mask
key
plus
upper
bound
on
medium
data
)
{
std
::
vector
<
uint8_t
>
data
;
data
.
insert
(
data
.
end
(),
65535
,
0xFF
);
byte_buffer
out
;
impl
::
assemble_frame
(
impl
::
binary_frame
,
0
,
as_bytes
(
make_span
(
data
)),
out
);
CAF_CHECK_EQUAL
(
take
(
out
,
8
),
bytes
({
0x82
,
// FIN + binary frame opcode
0x7E
,
// 126 -> uint16 size
0xFF
,
0xFF
,
// data size = 65535
0xFF
,
0xFF
,
0xFF
,
0xFF
,
// first 4 masked bytes
}));
impl
::
header
hdr
;
CAF_CHECK_EQUAL
(
impl
::
decode_header
(
out
,
hdr
),
4
);
CAF_CHECK_EQUAL
(
hdr
.
fin
,
true
);
CAF_CHECK_EQUAL
(
hdr
.
mask_key
,
0u
);
CAF_CHECK_EQUAL
(
hdr
.
opcode
,
impl
::
binary_frame
);
CAF_CHECK_EQUAL
(
hdr
.
payload_len
,
data
.
size
());
}
CAF_TEST
(
valid
mask
key
plus
upper
bound
on
medium
data
)
{
std
::
vector
<
uint8_t
>
data
;
data
.
insert
(
data
.
end
(),
65535
,
0xFF
);
byte_buffer
out
;
impl
::
assemble_frame
(
impl
::
binary_frame
,
0xDEADC0DE
,
as_bytes
(
make_span
(
data
)),
out
);
CAF_CHECK_EQUAL
(
take
(
out
,
12
),
bytes
({
0x82
,
// FIN + binary frame opcode
0xFE
,
// 126 -> uint16 size
0xFF
,
0xFF
,
// data size = 65535
0xDE
,
0xAD
,
0xC0
,
0xDE
,
// mask key,
0xFF
,
0xFF
,
0xFF
,
0xFF
,
// first 4 masked bytes
}));
impl
::
header
hdr
;
CAF_CHECK_EQUAL
(
impl
::
decode_header
(
out
,
hdr
),
8
);
CAF_CHECK_EQUAL
(
hdr
.
fin
,
true
);
CAF_CHECK_EQUAL
(
hdr
.
mask_key
,
0xDEADC0DEu
);
CAF_CHECK_EQUAL
(
hdr
.
opcode
,
impl
::
binary_frame
);
CAF_CHECK_EQUAL
(
hdr
.
payload_len
,
data
.
size
());
}
CAF_TEST
(
no
mask
key
plus
large
data
)
{
CAF_TEST
(
no
mask
key
plus
large
data
)
{
std
::
vector
<
uint8_t
>
data
;
std
::
vector
<
uint8_t
>
data
;
data
.
insert
(
data
.
end
(),
65536
,
0xFF
);
data
.
insert
(
data
.
end
(),
65536
,
0xFF
);
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment