| Index: runtime/bin/dartutils.cc
|
| ===================================================================
|
| --- runtime/bin/dartutils.cc (revision 31816)
|
| +++ runtime/bin/dartutils.cc (working copy)
|
| @@ -127,7 +127,7 @@
|
|
|
| void DartUtils::SetIntegerField(Dart_Handle handle,
|
| const char* name,
|
| - intptr_t val) {
|
| + int64_t val) {
|
| Dart_Handle result = Dart_SetField(handle,
|
| NewString(name),
|
| Dart_NewInteger(val));
|
| @@ -135,15 +135,6 @@
|
| }
|
|
|
|
|
| -intptr_t DartUtils::GetIntegerField(Dart_Handle handle,
|
| - const char* name) {
|
| - Dart_Handle result = Dart_GetField(handle, NewString(name));
|
| - if (Dart_IsError(result)) Dart_PropagateError(result);
|
| - intptr_t value = DartUtils::GetIntegerValue(result);
|
| - return value;
|
| -}
|
| -
|
| -
|
| void DartUtils::SetStringField(Dart_Handle handle,
|
| const char* name,
|
| const char* val) {
|
| @@ -224,19 +215,24 @@
|
|
|
|
|
| void DartUtils::ReadFile(const uint8_t** data,
|
| - intptr_t* file_len,
|
| + intptr_t* len,
|
| void* stream) {
|
| ASSERT(data != NULL);
|
| - ASSERT(file_len != NULL);
|
| + ASSERT(len != NULL);
|
| ASSERT(stream != NULL);
|
| File* file_stream = reinterpret_cast<File*>(stream);
|
| - *file_len = file_stream->Length();
|
| - ASSERT(*file_len > 0);
|
| - uint8_t* text_buffer = reinterpret_cast<uint8_t*>(malloc(*file_len));
|
| + int64_t file_len = file_stream->Length();
|
| + if ((file_len < 0) || (file_len > kIntptrMax)) {
|
| + *data = NULL;
|
| + *len = -1; // Indicates read was not successful.
|
| + return;
|
| + }
|
| + *len = static_cast<intptr_t>(file_len);
|
| + uint8_t* text_buffer = reinterpret_cast<uint8_t*>(malloc(*len));
|
| ASSERT(text_buffer != NULL);
|
| - if (!file_stream->ReadFully(text_buffer, *file_len)) {
|
| + if (!file_stream->ReadFully(text_buffer, *len)) {
|
| *data = NULL;
|
| - *file_len = -1; // Indicates read was not successful.
|
| + *len = -1; // Indicates read was not successful.
|
| return;
|
| }
|
| *data = text_buffer;
|
| @@ -300,7 +296,7 @@
|
| if (Dart_IsError(result)) {
|
| return result;
|
| }
|
| - intptr_t responseCode = DartUtils::GetIntegerValue(result);
|
| + int64_t responseCode = DartUtils::GetIntegerValue(result);
|
| if (responseCode != HttpResponseCodeOK) {
|
| // Return error.
|
| Dart_Handle responseStatus =
|
| @@ -1035,10 +1031,10 @@
|
| // Make sure that we do not have an integer overflow here. Actual check
|
| // against max elements will be done at the time of writing, as the constant
|
| // is not part of the public API.
|
| - if (length > kIntptrMax) {
|
| + if ((length < 0) || (length > kIntptrMax)) {
|
| return NULL;
|
| }
|
| - uint8_t* data = IOBuffer::Allocate(length);
|
| + uint8_t* data = IOBuffer::Allocate(static_cast<intptr_t>(length));
|
| ASSERT(data != NULL);
|
| return NewExternalUint8Array(
|
| static_cast<intptr_t>(length), data, data, IOBuffer::Finalizer);
|
|
|