[vm] Assert callback state for all Dart_Set*ReturnValue, take 2.

Fix scoping of raw typed data access in dart:io.

Change-Id: I458b36bf655e429cc57e266550ff1ab00f328f45
Reviewed-on: https://dart-review.googlesource.com/c/89943
Reviewed-by: Ben Konyi <bkonyi@google.com>
Commit-Queue: Ryan Macnak <rmacnak@google.com>
This commit is contained in:
Ryan Macnak 2019-01-17 20:37:33 +00:00 committed by commit-bot@chromium.org
parent ddce2824fa
commit e7bd3edc9f
3 changed files with 25 additions and 14 deletions

View file

@ -113,12 +113,15 @@ void FUNCTION_NAME(File_Open)(Dart_NativeArguments args) {
}
void FUNCTION_NAME(File_Exists)(Dart_NativeArguments args) {
Namespace* namespc = Namespace::GetNamespace(args, 0);
Dart_Handle path_handle = Dart_GetNativeArgument(args, 1);
TypedDataScope data(path_handle);
ASSERT(data.type() == Dart_TypedData_kUint8);
const char* filename = data.GetCString();
bool exists = File::Exists(namespc, filename);
bool exists;
{
Namespace* namespc = Namespace::GetNamespace(args, 0);
Dart_Handle path_handle = Dart_GetNativeArgument(args, 1);
TypedDataScope data(path_handle);
ASSERT(data.type() == Dart_TypedData_kUint8);
const char* filename = data.GetCString();
exists = File::Exists(namespc, filename);
}
Dart_SetBooleanReturnValue(args, exists);
}
@ -710,13 +713,16 @@ void FUNCTION_NAME(File_GetStdioHandleType)(Dart_NativeArguments args) {
}
void FUNCTION_NAME(File_GetType)(Dart_NativeArguments args) {
Namespace* namespc = Namespace::GetNamespace(args, 0);
Dart_Handle path_handle = Dart_GetNativeArgument(args, 1);
TypedDataScope data(path_handle);
ASSERT(data.type() == Dart_TypedData_kUint8);
const char* path = data.GetCString();
bool follow_links = DartUtils::GetNativeBooleanArgument(args, 2);
File::Type type = File::GetType(namespc, path, follow_links);
File::Type type;
{
Namespace* namespc = Namespace::GetNamespace(args, 0);
Dart_Handle path_handle = Dart_GetNativeArgument(args, 1);
TypedDataScope data(path_handle);
ASSERT(data.type() == Dart_TypedData_kUint8);
const char* path = data.GetCString();
bool follow_links = DartUtils::GetNativeBooleanArgument(args, 2);
type = File::GetType(namespc, path, follow_links);
}
Dart_SetIntegerReturnValue(args, static_cast<int>(type));
}

View file

@ -141,13 +141,13 @@ void FUNCTION_NAME(SynchronousSocket_WriteList)(Dart_NativeArguments args) {
buffer += offset;
intptr_t bytes_written =
SynchronousSocket::Write(socket->fd(), buffer, length);
Dart_TypedDataReleaseData(buffer_obj);
if (bytes_written >= 0) {
Dart_SetIntegerReturnValue(args, bytes_written);
} else {
OSError os_error;
Dart_SetReturnValue(args, DartUtils::NewDartOSError(&os_error));
}
Dart_TypedDataReleaseData(buffer_obj);
}
void FUNCTION_NAME(SynchronousSocket_ReadList)(Dart_NativeArguments args) {

View file

@ -4712,6 +4712,7 @@ DART_EXPORT void Dart_SetReturnValue(Dart_NativeArguments args,
Dart_Handle retval) {
NativeArguments* arguments = reinterpret_cast<NativeArguments*>(args);
ASSERT(arguments->thread()->isolate() == Isolate::Current());
ASSERT_CALLBACK_STATE(arguments->thread());
if ((retval != Api::Null()) && !Api::IsInstance(retval) &&
!Api::IsError(retval)) {
// Print the current stack trace to make the problematic caller
@ -4832,6 +4833,8 @@ Dart_SetEnvironmentCallback(Dart_EnvironmentCallback callback) {
DART_EXPORT void Dart_SetBooleanReturnValue(Dart_NativeArguments args,
bool retval) {
NativeArguments* arguments = reinterpret_cast<NativeArguments*>(args);
ASSERT(arguments->thread()->isolate() == Isolate::Current());
ASSERT_CALLBACK_STATE(arguments->thread());
arguments->SetReturn(Bool::Get(retval));
}
@ -4839,6 +4842,7 @@ DART_EXPORT void Dart_SetIntegerReturnValue(Dart_NativeArguments args,
int64_t retval) {
NativeArguments* arguments = reinterpret_cast<NativeArguments*>(args);
ASSERT(arguments->thread()->isolate() == Isolate::Current());
ASSERT_CALLBACK_STATE(arguments->thread());
if (Smi::IsValid(retval)) {
Api::SetSmiReturnValue(arguments, static_cast<intptr_t>(retval));
} else {
@ -4852,6 +4856,7 @@ DART_EXPORT void Dart_SetIntegerReturnValue(Dart_NativeArguments args,
DART_EXPORT void Dart_SetDoubleReturnValue(Dart_NativeArguments args,
double retval) {
NativeArguments* arguments = reinterpret_cast<NativeArguments*>(args);
ASSERT(arguments->thread()->isolate() == Isolate::Current());
ASSERT_CALLBACK_STATE(arguments->thread());
TransitionNativeToVM transition(arguments->thread());
Api::SetDoubleReturnValue(arguments, retval);