From ec55b4a82a699a60935ebc2bd1a99bae1b83a59e Mon Sep 17 00:00:00 2001 From: Benjamin Sergeant Date: Tue, 3 Sep 2019 16:07:48 -0700 Subject: [PATCH] Receiving invalid UTF-8 TEXT message should fail and close the connection (fix remaining autobahn test: 6.X UTF-8 Handling) --- DOCKER_VERSION | 2 +- docs/CHANGELOG.md | 4 ++++ ixwebsocket/IXWebSocketTransport.cpp | 21 +++++++++++++++++++-- ixwebsocket/IXWebSocketVersion.h | 2 +- 4 files changed, 25 insertions(+), 4 deletions(-) diff --git a/DOCKER_VERSION b/DOCKER_VERSION index 8710cfdf..cbad66a0 100644 --- a/DOCKER_VERSION +++ b/DOCKER_VERSION @@ -1 +1 @@ -5.1.6 +5.1.7 diff --git a/docs/CHANGELOG.md b/docs/CHANGELOG.md index 0deb3a1b..870b595c 100644 --- a/docs/CHANGELOG.md +++ b/docs/CHANGELOG.md @@ -1,6 +1,10 @@ # Changelog All notable changes to this project will be documented in this file. +## [5.1.7] - 2019-09-03 + +- Receiving invalid UTF-8 TEXT message should fail and close the connection (fix remaining autobahn test: 6.X UTF-8 Handling) + ## [5.1.6] - 2019-09-03 - Sending invalid UTF-8 TEXT message should fail and close the connection (fix remaining autobahn test: 6.X UTF-8 Handling) diff --git a/ixwebsocket/IXWebSocketTransport.cpp b/ixwebsocket/IXWebSocketTransport.cpp index 6cd10758..f2576861 100644 --- a/ixwebsocket/IXWebSocketTransport.cpp +++ b/ixwebsocket/IXWebSocketTransport.cpp @@ -789,11 +789,28 @@ namespace ix { std::string decompressedMessage; bool success = _perMessageDeflate.decompress(message, decompressedMessage); - onMessageCallback(decompressedMessage, wireSize, !success, messageKind); + + if (messageKind == MessageKind::MSG_TEXT && !validateUtf8(decompressedMessage)) + { + close(WebSocketCloseConstants::kInvalidFramePayloadData, + WebSocketCloseConstants::kInvalidFramePayloadDataMessage); + } + else + { + onMessageCallback(decompressedMessage, wireSize, !success, messageKind); + } } else { - onMessageCallback(message, wireSize, false, messageKind); + if (messageKind == MessageKind::MSG_TEXT && !validateUtf8(message)) + { + close(WebSocketCloseConstants::kInvalidFramePayloadData, + WebSocketCloseConstants::kInvalidFramePayloadDataMessage); + } + else + { + onMessageCallback(message, wireSize, false, messageKind); + } } } diff --git a/ixwebsocket/IXWebSocketVersion.h b/ixwebsocket/IXWebSocketVersion.h index 722a1657..184c6fe6 100644 --- a/ixwebsocket/IXWebSocketVersion.h +++ b/ixwebsocket/IXWebSocketVersion.h @@ -6,4 +6,4 @@ #pragma once -#define IX_WEBSOCKET_VERSION "5.1.6" +#define IX_WEBSOCKET_VERSION "5.1.7"