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

Unified Diff: runtime/bin/socket.cc

Issue 10441078: Add test that passes invalid arguments to socket methods and fix (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: Created 8 years, 7 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
Index: runtime/bin/socket.cc
diff --git a/runtime/bin/socket.cc b/runtime/bin/socket.cc
index 596cc5a580bce467566e1a5ce2c4b710d22b1fe4..98992b57c92d34fc5c96c538d9a8adb949c879b4 100644
--- a/runtime/bin/socket.cc
+++ b/runtime/bin/socket.cc
@@ -20,15 +20,22 @@ int Socket::service_ports_index_ = 0;
void FUNCTION_NAME(Socket_CreateConnect)(Dart_NativeArguments args) {
Dart_EnterScope();
- Dart_Handle socketobj = Dart_GetNativeArgument(args, 0);
+ Dart_Handle socket_obj = Dart_GetNativeArgument(args, 0);
const char* host = DartUtils::GetStringValue(Dart_GetNativeArgument(args, 1));
- int64_t port = DartUtils::GetIntegerValue(Dart_GetNativeArgument(args, 2));
- intptr_t socket = Socket::CreateConnect(host, port);
- if (socket >= 0) {
- DartUtils::SetIntegerField(socketobj, DartUtils::kIdFieldName, socket);
- Dart_SetReturnValue(args, Dart_True());
+ int64_t port = 0;
+ if (DartUtils::GetInt64Value(Dart_GetNativeArgument(args, 2), &port)) {
+ intptr_t socket = Socket::CreateConnect(host, port);
+ if (socket >= 0) {
+ DartUtils::SetIntegerField(socket_obj, DartUtils::kIdFieldName, socket);
+ Dart_SetReturnValue(args, Dart_True());
+ } else {
+ Dart_SetReturnValue(args, DartUtils::NewDartOSError());
+ }
} else {
- Dart_SetReturnValue(args, DartUtils::NewDartOSError());
+ OSError os_error(-1, "Invalid argument", OSError::kUnknown);
+ Dart_Handle err = DartUtils::NewDartOSError(&os_error);
+ if (Dart_IsError(err)) Dart_PropagateError(err);
+ Dart_SetReturnValue(args, err);
}
Dart_ExitScope();
}
@@ -54,38 +61,45 @@ void FUNCTION_NAME(Socket_ReadList)(Dart_NativeArguments args) {
DartUtils::GetIntegerField(Dart_GetNativeArgument(args, 0),
DartUtils::kIdFieldName);
Dart_Handle buffer_obj = Dart_GetNativeArgument(args, 1);
- ASSERT(Dart_IsList(buffer_obj));
- intptr_t offset =
- DartUtils::GetIntegerValue(Dart_GetNativeArgument(args, 2));
- intptr_t length =
- DartUtils::GetIntegerValue(Dart_GetNativeArgument(args, 3));
- intptr_t buffer_len = 0;
- Dart_Handle result = Dart_ListLength(buffer_obj, &buffer_len);
- if (Dart_IsError(result)) {
- Dart_PropagateError(result);
- }
- ASSERT((offset + length) <= buffer_len);
-
- if (Dart_IsVMFlagSet("short_socket_read")) {
- length = (length + 1) / 2;
- }
-
- uint8_t* buffer = new uint8_t[length];
- intptr_t bytes_read = Socket::Read(socket, buffer, length);
- if (bytes_read > 0) {
- Dart_Handle result =
- Dart_ListSetAsBytes(buffer_obj, offset, buffer, bytes_read);
+ int64_t offset = 0;
+ int64_t length = 0;
+ Dart_Handle offset_obj = Dart_GetNativeArgument(args, 2);
+ Dart_Handle length_obj = Dart_GetNativeArgument(args, 3);
+ if (Dart_IsList(buffer_obj) &&
+ DartUtils::GetInt64Value(offset_obj, &offset) &&
+ DartUtils::GetInt64Value(length_obj, &length)) {
+ intptr_t buffer_len = 0;
+ Dart_Handle result = Dart_ListLength(buffer_obj, &buffer_len);
if (Dart_IsError(result)) {
- delete[] buffer;
Dart_PropagateError(result);
}
- }
- delete[] buffer;
- if (bytes_read >= 0) {
- Dart_SetReturnValue(args, Dart_NewInteger(bytes_read));
+ ASSERT((offset + length) <= buffer_len);
+ if (Dart_IsVMFlagSet("short_socket_read")) {
+ length = (length + 1) / 2;
+ }
+ uint8_t* buffer = new uint8_t[length];
+ intptr_t bytes_read = Socket::Read(socket, buffer, length);
+ if (bytes_read > 0) {
+ Dart_Handle result =
+ Dart_ListSetAsBytes(buffer_obj, offset, buffer, bytes_read);
+ if (Dart_IsError(result)) {
+ delete[] buffer;
+ Dart_PropagateError(result);
+ }
+ }
+ delete[] buffer;
+ if (bytes_read >= 0) {
+ Dart_SetReturnValue(args, Dart_NewInteger(bytes_read));
+ } else {
+ Dart_SetReturnValue(args, DartUtils::NewDartOSError());
+ }
} else {
- Dart_SetReturnValue(args, DartUtils::NewDartOSError());
+ OSError os_error(-1, "Invalid argument", OSError::kUnknown);
+ Dart_Handle err = DartUtils::NewDartOSError(&os_error);
+ if (Dart_IsError(err)) Dart_PropagateError(err);
+ Dart_SetReturnValue(args, err);
}
+
Dart_ExitScope();
}
@@ -193,13 +207,13 @@ void FUNCTION_NAME(Socket_GetError)(Dart_NativeArguments args) {
void FUNCTION_NAME(Socket_GetStdioHandle)(Dart_NativeArguments args) {
Dart_EnterScope();
- Dart_Handle socketobj = Dart_GetNativeArgument(args, 0);
+ Dart_Handle socket_obj = Dart_GetNativeArgument(args, 0);
intptr_t num =
DartUtils::GetIntegerValue(Dart_GetNativeArgument(args, 1));
ASSERT(num == 0 || num == 1 || num == 2);
intptr_t socket = Socket::GetStdioHandle(num);
DartUtils::SetIntegerField(
- socketobj, DartUtils::kIdFieldName, socket);
+ socket_obj, DartUtils::kIdFieldName, socket);
Dart_SetReturnValue(args, Dart_NewBoolean(socket >= 0));
Dart_ExitScope();
}
@@ -207,20 +221,30 @@ void FUNCTION_NAME(Socket_GetStdioHandle)(Dart_NativeArguments args) {
void FUNCTION_NAME(ServerSocket_CreateBindListen)(Dart_NativeArguments args) {
Dart_EnterScope();
- Dart_Handle socketobj = Dart_GetNativeArgument(args, 0);
- const char* bindAddress =
- DartUtils::GetStringValue(Dart_GetNativeArgument(args, 1));
- intptr_t port = DartUtils::GetIntegerValue(Dart_GetNativeArgument(args, 2));
- intptr_t backlog =
- DartUtils::GetIntegerValue(Dart_GetNativeArgument(args, 3));
- intptr_t socket =
- ServerSocket::CreateBindListen(bindAddress, port, backlog);
- if (socket >= 0) {
- DartUtils::SetIntegerField(
- socketobj, DartUtils::kIdFieldName, socket);
- Dart_SetReturnValue(args, Dart_True());
+ Dart_Handle socket_obj = Dart_GetNativeArgument(args, 0);
+ Dart_Handle bind_address_obj = Dart_GetNativeArgument(args, 1);
+ Dart_Handle port_obj = Dart_GetNativeArgument(args, 2);
+ Dart_Handle backlog_obj = Dart_GetNativeArgument(args, 3);
+ int64_t port = 0;
+ int64_t backlog = 0;
+ if (Dart_IsString(bind_address_obj) &&
+ DartUtils::GetInt64Value(port_obj, &port) &&
+ DartUtils::GetInt64Value(backlog_obj, &backlog)) {
+ const char* bind_address = DartUtils::GetStringValue(bind_address_obj);
Søren Gjesse 2012/05/30 07:07:15 We could consider having GetStringValue work like
Mads Ager (google) 2012/05/30 07:35:12 Yes, that could be done. It makes sense to have tw
+ intptr_t socket =
+ ServerSocket::CreateBindListen(bind_address, port, backlog);
+ if (socket >= 0) {
+ DartUtils::SetIntegerField(
+ socket_obj, DartUtils::kIdFieldName, socket);
+ Dart_SetReturnValue(args, Dart_True());
+ } else {
+ Dart_SetReturnValue(args, DartUtils::NewDartOSError());
+ }
} else {
- Dart_SetReturnValue(args, DartUtils::NewDartOSError());
+ OSError os_error(-1, "Invalid argument", OSError::kUnknown);
+ Dart_Handle err = DartUtils::NewDartOSError(&os_error);
+ if (Dart_IsError(err)) Dart_PropagateError(err);
+ Dart_SetReturnValue(args, err);
}
Dart_ExitScope();
}
@@ -231,13 +255,13 @@ void FUNCTION_NAME(ServerSocket_Accept)(Dart_NativeArguments args) {
intptr_t socket =
DartUtils::GetIntegerField(Dart_GetNativeArgument(args, 0),
DartUtils::kIdFieldName);
- Dart_Handle socketobj = Dart_GetNativeArgument(args, 1);
- intptr_t newSocket = ServerSocket::Accept(socket);
- if (newSocket >= 0) {
+ Dart_Handle socket_obj = Dart_GetNativeArgument(args, 1);
+ intptr_t new_socket = ServerSocket::Accept(socket);
+ if (new_socket >= 0) {
DartUtils::SetIntegerField(
- socketobj, DartUtils::kIdFieldName, newSocket);
+ socket_obj, DartUtils::kIdFieldName, new_socket);
Dart_SetReturnValue(args, Dart_True());
- } else if (newSocket == ServerSocket::kTemporaryFailure) {
+ } else if (new_socket == ServerSocket::kTemporaryFailure) {
Dart_SetReturnValue(args, Dart_False());
} else {
Dart_SetReturnValue(args, DartUtils::NewDartOSError());
@@ -273,8 +297,8 @@ void SocketService(Dart_Port dest_port_id,
CObjectArray request(message);
if (message->type == Dart_CObject::kArray) {
if (request.Length() > 1 && request[0]->IsInt32()) {
- CObjectInt32 requestType(request[0]);
- switch (requestType.Value()) {
+ CObjectInt32 request_type(request[0]);
+ switch (request_type.Value()) {
case Socket::kLookupRequest:
response = LookupRequest(request);
break;

Powered by Google App Engine
This is Rietveld 408576698