| Index: gin/wrappable.cc
|
| diff --git a/gin/wrappable.cc b/gin/wrappable.cc
|
| index 8d41ce06c4dfc4b5abb0a08b50f5ac84929777c2..a330fefc8e89bb7071c7d592bdb708adc74ec1a7 100644
|
| --- a/gin/wrappable.cc
|
| +++ b/gin/wrappable.cc
|
| @@ -44,6 +44,14 @@ v8::Handle<v8::Object> WrappableBase::GetWrapperImpl(v8::Isolate* isolate,
|
| }
|
| CHECK_EQ(kNumberOfInternalFields, templ->InternalFieldCount());
|
| v8::Handle<v8::Object> wrapper = templ->NewInstance();
|
| + // |wrapper| may be empty in some extreme cases, e.g., when
|
| + // Object.prototype.constructor is overwritten.
|
| + if (wrapper.IsEmpty()) {
|
| + // The current wrappable object will be no longer managed by V8. Delete this
|
| + // now.
|
| + delete this;
|
| + return wrapper;
|
| + }
|
| wrapper->SetAlignedPointerInInternalField(kWrapperInfoIndex, info);
|
| wrapper->SetAlignedPointerInInternalField(kEncodedValueIndex, this);
|
| wrapper_.Reset(isolate, wrapper);
|
|
|