Sending invalid UTF-8 TEXT message should fail and close the connection (fix **tons** of autobahn test: 6.X UTF-8 Handling)

This commit is contained in:
Benjamin Sergeant 2019-09-03 10:30:22 -07:00
parent 82213fd3a5
commit 172cd39702
6 changed files with 11 additions and 6 deletions

View File

@ -1 +1 @@
5.1.3 5.1.4

View File

@ -1,6 +1,10 @@
# Changelog # Changelog
All notable changes to this project will be documented in this file. All notable changes to this project will be documented in this file.
## [5.1.4] - 2019-09-03
Sending invalid UTF-8 TEXT message should fail and close the connection (fix **tons** of autobahn test: 6.X UTF-8 Handling)
## [5.1.3] - 2019-09-03 ## [5.1.3] - 2019-09-03
Message type (TEXT or BINARY) is invalid for received fragmented messages (fix autobahn test: 5.3 through 5.8 Fragmentation) Message type (TEXT or BINARY) is invalid for received fragmented messages (fix autobahn test: 5.3 through 5.8 Fragmentation)

View File

@ -447,9 +447,7 @@ namespace ix
bool binary, bool binary,
const OnProgressCallback& onProgressCallback) const OnProgressCallback& onProgressCallback)
{ {
return sendMessage(data, return (binary) ? sendBinary(data, onProgressCallback) : sendText(data, onProgressCallback);
(binary) ? SendMessageKind::Binary: SendMessageKind::Text,
onProgressCallback);
} }
WebSocketSendInfo WebSocket::sendBinary(const std::string& text, WebSocketSendInfo WebSocket::sendBinary(const std::string& text,
@ -463,7 +461,8 @@ namespace ix
{ {
if (!isValidUtf8(text)) if (!isValidUtf8(text))
{ {
stop(); close(WebSocketCloseConstants::kNormalClosureCode,
WebSocketCloseConstants::kInvalidUtf8);
return false; return false;
} }
return sendMessage(text, SendMessageKind::Text, onProgressCallback); return sendMessage(text, SendMessageKind::Text, onProgressCallback);

View File

@ -23,4 +23,5 @@ namespace ix
const std::string WebSocketCloseConstants::kProtocolErrorReservedBitUsed("Reserved bit used"); const std::string WebSocketCloseConstants::kProtocolErrorReservedBitUsed("Reserved bit used");
const std::string WebSocketCloseConstants::kProtocolErrorPingPayloadOversized("Ping reason control frame with payload length > 125 octets"); const std::string WebSocketCloseConstants::kProtocolErrorPingPayloadOversized("Ping reason control frame with payload length > 125 octets");
const std::string WebSocketCloseConstants::kProtocolErrorCodeControlMessageFragmented("Control message fragmented"); const std::string WebSocketCloseConstants::kProtocolErrorCodeControlMessageFragmented("Control message fragmented");
const std::string WebSocketCloseConstants::kInvalidUtf8("Invalid UTF-8");
} }

View File

@ -28,5 +28,6 @@ namespace ix
static const std::string kProtocolErrorReservedBitUsed; static const std::string kProtocolErrorReservedBitUsed;
static const std::string kProtocolErrorPingPayloadOversized; static const std::string kProtocolErrorPingPayloadOversized;
static const std::string kProtocolErrorCodeControlMessageFragmented; static const std::string kProtocolErrorCodeControlMessageFragmented;
static const std::string kInvalidUtf8;
}; };
} // namespace ix } // namespace ix

View File

@ -6,4 +6,4 @@
#pragma once #pragma once
#define IX_WEBSOCKET_VERSION "5.1.3" #define IX_WEBSOCKET_VERSION "5.1.4"