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

Unified Diff: extensions/browser/api/socket/socket_api.cc

Issue 2058513006: Send API error response when chrome.socket.* API receives an invalid port number. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 4 years, 6 months 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 | « chrome/browser/extensions/api/socket/socket_api_unittest.cc ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: extensions/browser/api/socket/socket_api.cc
diff --git a/extensions/browser/api/socket/socket_api.cc b/extensions/browser/api/socket/socket_api.cc
index 4a25563279a7ba71c164605ca4c7c7b95a53a8c1..65ecf6004055f23c306fa37f18c078de70800432 100644
--- a/extensions/browser/api/socket/socket_api.cc
+++ b/extensions/browser/api/socket/socket_api.cc
@@ -40,8 +40,7 @@
namespace extensions {
-using content::BrowserThread;
-using content::SocketPermissionRequest;
+namespace {
const char kAddressKey[] = "address";
const char kPortKey[] = "port";
@@ -53,6 +52,7 @@ const char kSocketIdKey[] = "socketId";
const char kSocketNotFoundError[] = "Socket not found";
const char kDnsLookupFailedError[] = "DNS resolution failed";
const char kPermissionError[] = "App does not have permission";
+const char kPortInvalidError[] = "Port must be a value between 0 and 65535.";
const char kNetworkListError[] = "Network lookup failed or unsupported";
const char kTCPSocketBindError[] =
"TCP socket does not support bind. For TCP server please use listen.";
@@ -66,6 +66,15 @@ const uint16_t kWildcardPort = 0;
const char kFirewallFailure[] = "Failed to open firewall port";
#endif // OS_CHROMEOS
+bool IsPortValid(int port) {
+ return port >= 0 && port <= 65535;
+}
+
+} // namespace
+
+using content::BrowserThread;
+using content::SocketPermissionRequest;
+
SocketAsyncApiFunction::SocketAsyncApiFunction() {}
SocketAsyncApiFunction::~SocketAsyncApiFunction() {}
@@ -271,8 +280,11 @@ bool SocketConnectFunction::Prepare() {
EXTENSION_FUNCTION_VALIDATE(args_->GetInteger(0, &socket_id_));
EXTENSION_FUNCTION_VALIDATE(args_->GetString(1, &hostname_));
int port;
- EXTENSION_FUNCTION_VALIDATE(
- args_->GetInteger(2, &port) && port >= 0 && port <= 65535);
+ EXTENSION_FUNCTION_VALIDATE(args_->GetInteger(2, &port));
+ if (!IsPortValid(port)) {
+ error_ = kPortInvalidError;
+ return false;
+ }
port_ = static_cast<uint16_t>(port);
return true;
}
@@ -359,8 +371,11 @@ bool SocketBindFunction::Prepare() {
EXTENSION_FUNCTION_VALIDATE(args_->GetInteger(0, &socket_id_));
EXTENSION_FUNCTION_VALIDATE(args_->GetString(1, &address_));
int port;
- EXTENSION_FUNCTION_VALIDATE(
- args_->GetInteger(2, &port) && port >= 0 && port <= 65535);
+ EXTENSION_FUNCTION_VALIDATE(args_->GetInteger(2, &port));
+ if (!IsPortValid(port)) {
+ error_ = kPortInvalidError;
+ return false;
+ }
port_ = static_cast<uint16_t>(port);
return true;
}
@@ -607,8 +622,11 @@ bool SocketSendToFunction::Prepare() {
EXTENSION_FUNCTION_VALIDATE(args_->GetBinary(1, &data));
EXTENSION_FUNCTION_VALIDATE(args_->GetString(2, &hostname_));
int port;
- EXTENSION_FUNCTION_VALIDATE(
- args_->GetInteger(3, &port) && port >= 0 && port <= 65535);
+ EXTENSION_FUNCTION_VALIDATE(args_->GetInteger(3, &port));
+ if (!IsPortValid(port)) {
+ error_ = kPortInvalidError;
+ return false;
+ }
port_ = static_cast<uint16_t>(port);
io_buffer_size_ = data->GetSize();
« no previous file with comments | « chrome/browser/extensions/api/socket/socket_api_unittest.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698