Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1719)

Unified Diff: webkit/plugins/ppapi/ppb_websocket_impl.cc

Issue 8839003: WebSocket Pepper API: validate redundant protocols in Connect() (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 9 years ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « ppapi/tests/test_websocket.cc ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: webkit/plugins/ppapi/ppb_websocket_impl.cc
diff --git a/webkit/plugins/ppapi/ppb_websocket_impl.cc b/webkit/plugins/ppapi/ppb_websocket_impl.cc
index 9d4fc20048dad6f8ecea1095b6e914a4b01da146..b5ab02329c2dc3398bf55c66ecd1229c6fee2a40 100644
--- a/webkit/plugins/ppapi/ppb_websocket_impl.cc
+++ b/webkit/plugins/ppapi/ppb_websocket_impl.cc
@@ -8,6 +8,7 @@
#include "base/basictypes.h"
#include "base/logging.h"
+#include "base/values.h"
#include "googleurl/src/gurl.h"
#include "net/base/net_util.h"
#include "ppapi/c/pp_completion_callback.h"
@@ -146,16 +147,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;
+ base::DictionaryValue protocol_set;
dmichael (off chromium) 2011/12/07 20:21:13 Why not just use std::set? This seems like overkil
Takashi Toyoshima 2011/12/08 05:12:46 Oh, that's right. I misunderstood about std::set<s
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.HasKey(string_var->value()))
+ return PP_ERROR_BADARGUMENT;
+ protocol_set.SetBoolean(string_var->value(), true);
+
+ // 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) {
@@ -174,6 +184,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());
« no previous file with comments | « ppapi/tests/test_websocket.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698