diff options
author | toyoshim@chromium.org <toyoshim@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2011-12-09 04:26:28 +0000 |
---|---|---|
committer | toyoshim@chromium.org <toyoshim@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2011-12-09 04:26:28 +0000 |
commit | 32b05b19f33da05b1bc94d628151ce8388e1d228 (patch) | |
tree | 1f32aa70e6ed2dcd440a9f8da47babd9664c2660 /webkit | |
parent | 7aec8cabde3730766ea60f7340eb0414dff91782 (diff) | |
download | chromium_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.cc | 13 |
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()); |