Commit 43ce9c6f authored by caitpotter88's avatar caitpotter88 Committed by Commit bot

[d8] bounds-check before getting Shell::Worker internal field

Prevents fatal error in debug builds

BUG=v8:4271
R=binji@chromium.org
LOG=N

Review URL: https://codereview.chromium.org/1214053004

Cr-Commit-Position: refs/heads/master@{#29524}
parent a1f20f09
......@@ -717,14 +717,17 @@ void Shell::WorkerPostMessage(const v8::FunctionCallbackInfo<v8::Value>& args) {
Isolate* isolate = args.GetIsolate();
HandleScope handle_scope(isolate);
Local<Context> context = isolate->GetCurrentContext();
Local<Value> this_value;
if (args.Length() < 1) {
Throw(isolate, "Invalid argument");
return;
}
Local<Value> this_value = args.This()->GetInternalField(0);
if (!this_value->IsExternal()) {
if (args.This()->InternalFieldCount() > 0) {
this_value = args.This()->GetInternalField(0);
}
if (this_value.IsEmpty()) {
Throw(isolate, "this is not a Worker");
return;
}
......@@ -770,9 +773,11 @@ void Shell::WorkerPostMessage(const v8::FunctionCallbackInfo<v8::Value>& args) {
void Shell::WorkerGetMessage(const v8::FunctionCallbackInfo<v8::Value>& args) {
Isolate* isolate = args.GetIsolate();
HandleScope handle_scope(isolate);
Local<Value> this_value = args.This()->GetInternalField(0);
if (!this_value->IsExternal()) {
Local<Value> this_value;
if (args.This()->InternalFieldCount() > 0) {
this_value = args.This()->GetInternalField(0);
}
if (this_value.IsEmpty()) {
Throw(isolate, "this is not a Worker");
return;
}
......@@ -795,8 +800,11 @@ void Shell::WorkerGetMessage(const v8::FunctionCallbackInfo<v8::Value>& args) {
void Shell::WorkerTerminate(const v8::FunctionCallbackInfo<v8::Value>& args) {
Isolate* isolate = args.GetIsolate();
HandleScope handle_scope(isolate);
Local<Value> this_value = args.This()->GetInternalField(0);
if (!this_value->IsExternal()) {
Local<Value> this_value;
if (args.This()->InternalFieldCount() > 0) {
this_value = args.This()->GetInternalField(0);
}
if (this_value.IsEmpty()) {
Throw(isolate, "this is not a Worker");
return;
}
......
// Copyright 2015 the V8 project authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
// Throw rather than overflow internal field index
assertThrows(function() {
Worker.prototype.terminate();
});
assertThrows(function() {
Worker.prototype.getMessage();
});
assertThrows(function() {
Worker.prototype.postMessage({});
});
// Don't throw for real worker
var worker = new Worker('');
worker.getMessage();
worker.postMessage({});
worker.terminate();
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment