diff options
author | yhirano@chromium.org <yhirano@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2014-02-19 08:36:32 +0000 |
---|---|---|
committer | yhirano@chromium.org <yhirano@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2014-02-19 08:36:32 +0000 |
commit | 69d7a49c29abea1f2d1c6ec71551e9b049843e55 (patch) | |
tree | 14829208b7a451df0a420a5d129c88afec2801fe /net/websockets | |
parent | 06d2fb32e5f64355b02e6804e55eb80773bb6027 (diff) | |
download | chromium_src-69d7a49c29abea1f2d1c6ec71551e9b049843e55.zip chromium_src-69d7a49c29abea1f2d1c6ec71551e9b049843e55.tar.gz chromium_src-69d7a49c29abea1f2d1c6ec71551e9b049843e55.tar.bz2 |
[WebSocket] Fix permessage-deflate handshake failure messages.
BUG=339373
R=ricea@chromium.org
Review URL: https://codereview.chromium.org/158663003
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@252008 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'net/websockets')
-rw-r--r-- | net/websockets/websocket_basic_handshake_stream.cc | 39 | ||||
-rw-r--r-- | net/websockets/websocket_stream_test.cc | 45 |
2 files changed, 45 insertions, 39 deletions
diff --git a/net/websockets/websocket_basic_handshake_stream.cc b/net/websockets/websocket_basic_handshake_stream.cc index a8d12fc..6d769e0 100644 --- a/net/websockets/websocket_basic_handshake_stream.cc +++ b/net/websockets/websocket_basic_handshake_stream.cc @@ -16,6 +16,7 @@ #include "base/containers/hash_tables.h" #include "base/stl_util.h" #include "base/strings/string_number_conversions.h" +#include "base/strings/string_piece.h" #include "base/strings/string_util.h" #include "base/strings/stringprintf.h" #include "base/time/time.h" @@ -222,6 +223,12 @@ bool ValidateSubProtocol( return true; } +bool DeflateError(std::string* message, const base::StringPiece& piece) { + *message = "Error in permessage-deflate: "; + AppendToString(piece, message); + return false; +} + bool ValidatePerMessageDeflateExtension(const WebSocketExtension& extension, std::string* failure_message, WebSocketExtensionParams* params) { @@ -241,44 +248,42 @@ bool ValidatePerMessageDeflateExtension(const WebSocketExtension& extension, it != parameters.end(); ++it) { const std::string& name = it->name(); if (seen_names.count(name) != 0) { - *failure_message = - "Received duplicate permessage-deflate extension parameter " + name; - return false; + return DeflateError( + failure_message, + "Received duplicate permessage-deflate extension parameter " + name); } seen_names.insert(name); const std::string client_or_server(name, 0, kPrefixLen); const bool is_client = (client_or_server == kClientPrefix); if (!is_client && client_or_server != kServerPrefix) { - *failure_message = - "Received an unexpected permessage-deflate extension parameter"; - return false; + return DeflateError( + failure_message, + "Received an unexpected permessage-deflate extension parameter"); } const std::string rest(name, kPrefixLen); if (rest == kNoContextTakeover) { if (it->HasValue()) { - *failure_message = "Received invalid " + name + " parameter"; - return false; + return DeflateError(failure_message, + "Received invalid " + name + " parameter"); } if (is_client) params->deflate_mode = WebSocketDeflater::DO_NOT_TAKE_OVER_CONTEXT; } else if (rest == kMaxWindowBits) { - if (!it->HasValue()) { - *failure_message = name + " must have value"; - return false; - } + if (!it->HasValue()) + return DeflateError(failure_message, name + " must have value"); int bits = 0; if (!base::StringToInt(it->value(), &bits) || bits < 8 || bits > 15 || it->value()[0] == '0' || it->value().find_first_not_of("0123456789") != std::string::npos) { - *failure_message = "Received invalid " + name + " parameter"; - return false; + return DeflateError(failure_message, + "Received invalid " + name + " parameter"); } if (is_client) params->client_window_bits = bits; } else { - *failure_message = - "Received an unexpected permessage-deflate extension parameter"; - return false; + return DeflateError( + failure_message, + "Received an unexpected permessage-deflate extension parameter"); } } params->deflate_enabled = true; diff --git a/net/websockets/websocket_stream_test.cc b/net/websockets/websocket_stream_test.cc index de9e276..d896453 100644 --- a/net/websockets/websocket_stream_test.cc +++ b/net/websockets/websocket_stream_test.cc @@ -491,8 +491,8 @@ TEST_F(WebSocketStreamCreateExtensionTest, OnlyOnePerMessageDeflateAllowed) { EXPECT_FALSE(stream_); EXPECT_TRUE(has_failed()); EXPECT_EQ( - "Error during WebSocket handshake: Received duplicate permessage-deflate " - "response", + "Error during WebSocket handshake: " + "Received duplicate permessage-deflate response", failure_message()); } @@ -504,8 +504,9 @@ TEST_F(WebSocketStreamCreateExtensionTest, NoDuplicateParameters) { EXPECT_FALSE(stream_); EXPECT_TRUE(has_failed()); EXPECT_EQ( - "Error during WebSocket handshake: Received duplicate permessage-deflate " - "extension parameter client_no_context_takeover", + "Error during WebSocket handshake: Error in permessage-deflate: " + "Received duplicate permessage-deflate extension parameter " + "client_no_context_takeover", failure_message()); } @@ -516,8 +517,8 @@ TEST_F(WebSocketStreamCreateExtensionTest, BadParameterPrefix) { EXPECT_FALSE(stream_); EXPECT_TRUE(has_failed()); EXPECT_EQ( - "Error during WebSocket handshake: Received an unexpected " - "permessage-deflate extension parameter", + "Error during WebSocket handshake: Error in permessage-deflate: " + "Received an unexpected permessage-deflate extension parameter", failure_message()); } @@ -529,8 +530,8 @@ TEST_F(WebSocketStreamCreateExtensionTest, BadParameterSuffix) { EXPECT_FALSE(stream_); EXPECT_TRUE(has_failed()); EXPECT_EQ( - "Error during WebSocket handshake: Received an unexpected " - "permessage-deflate extension parameter", + "Error during WebSocket handshake: Error in permessage-deflate: " + "Received an unexpected permessage-deflate extension parameter", failure_message()); } @@ -541,8 +542,8 @@ TEST_F(WebSocketStreamCreateExtensionTest, BadParameterValue) { EXPECT_FALSE(stream_); EXPECT_TRUE(has_failed()); EXPECT_EQ( - "Error during WebSocket handshake: Received invalid " - "client_no_context_takeover parameter", + "Error during WebSocket handshake: Error in permessage-deflate: " + "Received invalid client_no_context_takeover parameter", failure_message()); } @@ -552,8 +553,8 @@ TEST_F(WebSocketStreamCreateExtensionTest, NoMaxWindowBitsArgument) { EXPECT_FALSE(stream_); EXPECT_TRUE(has_failed()); EXPECT_EQ( - "Error during WebSocket handshake: client_max_window_bits must have " - "value", + "Error during WebSocket handshake: Error in permessage-deflate: " + "client_max_window_bits must have value", failure_message()); } @@ -564,8 +565,8 @@ TEST_F(WebSocketStreamCreateExtensionTest, MaxWindowBitsValueInteger) { EXPECT_FALSE(stream_); EXPECT_TRUE(has_failed()); EXPECT_EQ( - "Error during WebSocket handshake: Received invalid " - "server_max_window_bits parameter", + "Error during WebSocket handshake: Error in permessage-deflate: " + "Received invalid server_max_window_bits parameter", failure_message()); } @@ -576,8 +577,8 @@ TEST_F(WebSocketStreamCreateExtensionTest, MaxWindowBitsValueTooSmall) { EXPECT_FALSE(stream_); EXPECT_TRUE(has_failed()); EXPECT_EQ( - "Error during WebSocket handshake: Received invalid " - "server_max_window_bits parameter", + "Error during WebSocket handshake: Error in permessage-deflate: " + "Received invalid server_max_window_bits parameter", failure_message()); } @@ -588,8 +589,8 @@ TEST_F(WebSocketStreamCreateExtensionTest, MaxWindowBitsValueTooBig) { EXPECT_FALSE(stream_); EXPECT_TRUE(has_failed()); EXPECT_EQ( - "Error during WebSocket handshake: Received invalid " - "client_max_window_bits parameter", + "Error during WebSocket handshake: Error in permessage-deflate: " + "Received invalid client_max_window_bits parameter", failure_message()); } @@ -600,8 +601,8 @@ TEST_F(WebSocketStreamCreateExtensionTest, MaxWindowBitsValueStartsWithZero) { EXPECT_FALSE(stream_); EXPECT_TRUE(has_failed()); EXPECT_EQ( - "Error during WebSocket handshake: Received invalid " - "client_max_window_bits parameter", + "Error during WebSocket handshake: Error in permessage-deflate: " + "Received invalid client_max_window_bits parameter", failure_message()); } @@ -612,8 +613,8 @@ TEST_F(WebSocketStreamCreateExtensionTest, MaxWindowBitsValueStartsWithPlus) { EXPECT_FALSE(stream_); EXPECT_TRUE(has_failed()); EXPECT_EQ( - "Error during WebSocket handshake: Received invalid " - "server_max_window_bits parameter", + "Error during WebSocket handshake: Error in permessage-deflate: " + "Received invalid server_max_window_bits parameter", failure_message()); } |