summaryrefslogtreecommitdiffstats
path: root/webkit
diff options
context:
space:
mode:
authortoyoshim@chromium.org <toyoshim@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2011-12-09 04:26:28 +0000
committertoyoshim@chromium.org <toyoshim@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2011-12-09 04:26:28 +0000
commit32b05b19f33da05b1bc94d628151ce8388e1d228 (patch)
tree1f32aa70e6ed2dcd440a9f8da47babd9664c2660 /webkit
parent7aec8cabde3730766ea60f7340eb0414dff91782 (diff)
downloadchromium_src-32b05b19f33da05b1bc94d628151ce8388e1d228.zip
chromium_src-32b05b19f33da05b1bc94d628151ce8388e1d228.tar.gz
chromium_src-32b05b19f33da05b1bc94d628151ce8388e1d228.tar.bz2
WebSocket Pepper API: validate redundant protocols in Connect()
Given protocols argument is not allowed to have any duplicated protocol name in Connect(). This CL contains constant number replacement in test_websocket.cc like s/0/0U/g, and detailed comments on protocols argument check. BUG=87310 TEST=ui_tests --gtest_filter='PPAPITest.WebSocket_Protocols' Review URL: http://codereview.chromium.org/8839003 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@113760 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'webkit')
-rw-r--r--webkit/plugins/ppapi/ppb_websocket_impl.cc13
1 files changed, 12 insertions, 1 deletions
diff --git a/webkit/plugins/ppapi/ppb_websocket_impl.cc b/webkit/plugins/ppapi/ppb_websocket_impl.cc
index f460aea..48bc1f5 100644
--- a/webkit/plugins/ppapi/ppb_websocket_impl.cc
+++ b/webkit/plugins/ppapi/ppb_websocket_impl.cc
@@ -4,6 +4,7 @@
#include "webkit/plugins/ppapi/ppb_websocket_impl.h"
+#include <set>
#include <string>
#include "base/basictypes.h"
@@ -144,16 +145,25 @@ int32_t PPB_WebSocket_Impl::Connect(PP_Var url,
WebURL web_url(gurl);
// Validate protocols and convert it to WebString.
- // TODO(toyoshim): Detect duplicated protocols as error.
std::string protocol_string;
+ std::set<std::string> protocol_set;
for (uint32_t i = 0; i < protocol_count; i++) {
// TODO(toyoshim): Similar function exist in WebKit::WebSocket.
// We must rearrange them into WebKit::WebChannel and share its protocol
// related implementation via WebKit API.
scoped_refptr<StringVar> string_var;
string_var = StringVar::FromPPVar(protocols[i]);
+
+ // Check duplicated protocol entries.
+ if (protocol_set.find(string_var->value()) != protocol_set.end())
+ return PP_ERROR_BADARGUMENT;
+ protocol_set.insert(string_var->value());
+
+ // Check invalid and empty entries.
if (!string_var || !string_var->value().length())
return PP_ERROR_BADARGUMENT;
+
+ // Check containing characters.
for (std::string::const_iterator it = string_var->value().begin();
it != string_var->value().end();
++it) {
@@ -172,6 +182,7 @@ int32_t PPB_WebSocket_Impl::Connect(PP_Var url,
character == '{' || character == '}')
return PP_ERROR_BADARGUMENT;
}
+ // Join protocols with the comma separator.
if (i != 0)
protocol_string.append(",");
protocol_string.append(string_var->value());