summaryrefslogtreecommitdiffstats
path: root/net/websockets
diff options
context:
space:
mode:
authoryhirano@chromium.org <yhirano@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2014-02-19 08:36:32 +0000
committeryhirano@chromium.org <yhirano@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2014-02-19 08:36:32 +0000
commit69d7a49c29abea1f2d1c6ec71551e9b049843e55 (patch)
tree14829208b7a451df0a420a5d129c88afec2801fe /net/websockets
parent06d2fb32e5f64355b02e6804e55eb80773bb6027 (diff)
downloadchromium_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.cc39
-rw-r--r--net/websockets/websocket_stream_test.cc45
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());
}