diff options
author | Tom Sepez <tsepez@chromium.org> | 2018-04-05 22:41:53 +0000 |
---|---|---|
committer | Chromium commit bot <commit-bot@chromium.org> | 2018-04-05 22:41:53 +0000 |
commit | 4862705090a7469115ae7e3c80143b6f8b6b527a (patch) | |
tree | a7894aa174e3621bfa15e4070e418ee2b1f01f31 /fxjs/cfxjse_class.cpp | |
parent | 0c5928825d0bc0c397e90d2c4861feaf9bdc6d24 (diff) | |
download | pdfium-4862705090a7469115ae7e3c80143b6f8b6b527a.tar.xz |
Make Internal field usage in cfxjs_engine match README.doc
As it turns out, this doesn't cause any bugs with the FXJS/FXJSE
interaction since the magic values will never be present in the
other slot, but the code looks wrong wrt. the document.
Also fix an assert in FXJSE that our objects have two slots,
and null appropriately (just a defensive measure).
Also assert that one of our casts is valid.
Change-Id: I3146fe58350da5e9b76e711d81480565dabd587f
Reviewed-on: https://pdfium-review.googlesource.com/29859
Reviewed-by: dsinclair <dsinclair@chromium.org>
Commit-Queue: Tom Sepez <tsepez@chromium.org>
Diffstat (limited to 'fxjs/cfxjse_class.cpp')
-rw-r--r-- | fxjs/cfxjse_class.cpp | 17 |
1 files changed, 13 insertions, 4 deletions
diff --git a/fxjs/cfxjse_class.cpp b/fxjs/cfxjse_class.cpp index dd2181b853..c35ee4aa29 100644 --- a/fxjs/cfxjse_class.cpp +++ b/fxjs/cfxjse_class.cpp @@ -47,8 +47,9 @@ void V8ConstructorCallback_Wrapper( if (!lpClassDefinition) return; - ASSERT(info.Holder()->InternalFieldCount()); + ASSERT(info.Holder()->InternalFieldCount() == 2); info.Holder()->SetAlignedPointerInInternalField(0, nullptr); + info.Holder()->SetAlignedPointerInInternalField(1, nullptr); } void Context_GlobalObjToString( @@ -75,11 +76,19 @@ void Context_GlobalObjToString( void DynPropGetterAdapter_MethodCallback( const v8::FunctionCallbackInfo<v8::Value>& info) { v8::Local<v8::Object> hCallBackInfo = info.Data().As<v8::Object>(); - FXJSE_CLASS_DESCRIPTOR* lpClass = static_cast<FXJSE_CLASS_DESCRIPTOR*>( - hCallBackInfo->GetAlignedPointerFromInternalField(0)); + ASSERT(hCallBackInfo->InternalFieldCount() == 2); + + const FXJSE_CLASS_DESCRIPTOR* lpClass = + static_cast<const FXJSE_CLASS_DESCRIPTOR*>( + hCallBackInfo->GetAlignedPointerFromInternalField(0)); + ASSERT(lpClass == &GlobalClassDescriptor || + lpClass == &NormalClassDescriptor || + lpClass == &VariablesClassDescriptor || + lpClass == &kFormCalcFM2JSDescriptor); + v8::Local<v8::String> hPropName = hCallBackInfo->GetInternalField(1).As<v8::String>(); - ASSERT(lpClass && !hPropName.IsEmpty()); + ASSERT(!hPropName.IsEmpty()); v8::String::Utf8Value szPropName(info.GetIsolate(), hPropName); WideString szFxPropName = WideString::FromUTF8(*szPropName); |