Commit dc74da1a authored by Samir Halilcevic's avatar Samir Halilcevic

Integrate review feedback

parent 54e924ae
...@@ -19,7 +19,7 @@ void rfc6455::mask_data(uint32_t key, byte_span data, size_t skip) { ...@@ -19,7 +19,7 @@ void rfc6455::mask_data(uint32_t key, byte_span data, size_t skip) {
std::byte arr[4]; std::byte arr[4];
memcpy(arr, &no_key, 4); memcpy(arr, &no_key, 4);
data = data.subspan(skip); data = data.subspan(skip);
size_t i = skip % 4; auto i = skip % 4;
for (auto& x : data) { for (auto& x : data) {
x = x ^ arr[i]; x = x ^ arr[i];
i = (i + 1) % 4; i = (i + 1) % 4;
......
...@@ -83,7 +83,6 @@ void framing::abort(const error& reason) { ...@@ -83,7 +83,6 @@ void framing::abort(const error& reason) {
ptrdiff_t framing::consume(byte_span buffer, byte_span delta) { ptrdiff_t framing::consume(byte_span buffer, byte_span delta) {
// Make sure we're overriding any 'exactly' setting. // Make sure we're overriding any 'exactly' setting.
down_->configure_read(receive_policy::up_to(2048)); down_->configure_read(receive_policy::up_to(2048));
// Parse header. // Parse header.
detail::rfc6455::header hdr; detail::rfc6455::header hdr;
auto hdr_bytes = detail::rfc6455::decode_header(buffer, hdr); auto hdr_bytes = detail::rfc6455::decode_header(buffer, hdr);
...@@ -132,9 +131,8 @@ ptrdiff_t framing::consume(byte_span buffer, byte_span delta) { ...@@ -132,9 +131,8 @@ ptrdiff_t framing::consume(byte_span buffer, byte_span delta) {
auto payload = buffer.subspan(hdr_bytes, std::min(buffer.size() - hdr_bytes, auto payload = buffer.subspan(hdr_bytes, std::min(buffer.size() - hdr_bytes,
hdr.payload_len)); hdr.payload_len));
// Unmask the arrived data. // Unmask the arrived data.
if (hdr.mask_key != 0) { if (hdr.mask_key != 0)
detail::rfc6455::mask_data(hdr.mask_key, payload, offset); detail::rfc6455::mask_data(hdr.mask_key, payload, offset);
}
size_t frame_size = hdr_bytes + hdr.payload_len; size_t frame_size = hdr_bytes + hdr.payload_len;
// In case of text message, we want to validate the UTF-8 encoding early. // In case of text message, we want to validate the UTF-8 encoding early.
if (hdr.opcode == detail::rfc6455::text_frame if (hdr.opcode == detail::rfc6455::text_frame
...@@ -192,7 +190,9 @@ ptrdiff_t framing::consume(byte_span buffer, byte_span delta) { ...@@ -192,7 +190,9 @@ ptrdiff_t framing::consume(byte_span buffer, byte_span delta) {
return -1; return -1;
} }
// Call upper layer. // Call upper layer.
return handle(hdr.opcode, payload, frame_size); auto result = handle(hdr.opcode, payload, frame_size);
validation_offset_ = 0;
return result;
} }
if (hdr.opcode != detail::rfc6455::continuation_frame) { if (hdr.opcode != detail::rfc6455::continuation_frame) {
CAF_LOG_DEBUG("expected a WebSocket continuation_frame"); CAF_LOG_DEBUG("expected a WebSocket continuation_frame");
...@@ -227,11 +227,6 @@ ptrdiff_t framing::consume(byte_span buffer, byte_span delta) { ...@@ -227,11 +227,6 @@ ptrdiff_t framing::consume(byte_span buffer, byte_span delta) {
if (opcode_ != detail::rfc6455::text_frame) { if (opcode_ != detail::rfc6455::text_frame) {
payload_buf_.insert(payload_buf_.end(), payload.begin(), payload.end()); payload_buf_.insert(payload_buf_.end(), payload.begin(), payload.end());
} }
if (opcode_ == detail::rfc6455::text_frame
&& !payload_valid(payload_buf_, validation_offset_)) {
abort_and_shutdown(sec::malformed_message, "invalid UTF-8 sequence");
return -1;
}
return static_cast<ptrdiff_t>(frame_size); return static_cast<ptrdiff_t>(frame_size);
} }
...@@ -319,7 +314,6 @@ ptrdiff_t framing::handle(uint8_t opcode, byte_span payload, ...@@ -319,7 +314,6 @@ ptrdiff_t framing::handle(uint8_t opcode, byte_span payload,
payload.size()}; payload.size()};
if (up_->consume_text(text) < 0) if (up_->consume_text(text) < 0)
return -1; return -1;
validation_offset_ = 0;
break; break;
} }
case detail::rfc6455::binary_frame: case detail::rfc6455::binary_frame:
......
...@@ -185,12 +185,7 @@ TEST_CASE("data may arrive fragmented") { ...@@ -185,12 +185,7 @@ TEST_CASE("data may arrive fragmented") {
rfc6455_append(detail::rfc6455::continuation_frame, "Socket!\n"sv, buf); rfc6455_append(detail::rfc6455::continuation_frame, "Socket!\n"sv, buf);
transport->push(buf); transport->push(buf);
CHECK_EQ(transport->handle_input(), static_cast<ptrdiff_t>(buf.size())); CHECK_EQ(transport->handle_input(), static_cast<ptrdiff_t>(buf.size()));
auto expected = "Hello WebSocket!\nBye WebSocket!\n"sv; CHECK_EQ(app->text_input, "Hello WebSocket!\nBye WebSocket!\n");
CHECK_EQ(app->text_input.size(), expected.size());
for (auto i = 0ul; i < expected.size(); i++) {
CHECK_EQ(app->text_input.at(i), expected.at(i));
}
MESSAGE(app->text_input);
CHECK(!app->has_aborted()); CHECK(!app->has_aborted());
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment