Fix memory leak in FXJS_ReleaseRuntime.
authorOliver Chang <ochang@chromium.org>
Tue, 27 Oct 2015 16:21:32 +0000 (09:21 -0700)
committerOliver Chang <ochang@chromium.org>
Tue, 27 Oct 2015 16:21:32 +0000 (09:21 -0700)
Should fix a bunch of JS related memory leaks reported by LSan/DrMemory.

R=jochen@chromium.org, thestig@chromium.org, tsepez@chromium.org
BUG=pdfium:242

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

fpdfsdk/src/jsapi/fxjs_v8.cpp

index 8a54475..2fb3e13 100644 (file)
@@ -335,9 +335,15 @@ void FXJS_ReleaseRuntime(v8::Isolate* pIsolate,
   int maxID = CFXJS_ObjDefinition::MaxID(pIsolate);
   for (int i = 0; i < maxID; ++i) {
     CFXJS_ObjDefinition* pObjDef = CFXJS_ObjDefinition::ForID(pIsolate, i);
-    if (!pObjDef->m_StaticObj.IsEmpty()) {
-      v8::Local<v8::Object> pObj =
-          v8::Local<v8::Object>::New(pIsolate, pObjDef->m_StaticObj);
+    v8::Local<v8::Object> pObj;
+    if (pObjDef->m_ObjType == FXJSOBJTYPE_GLOBAL) {
+      pObj =
+          context->Global()->GetPrototype()->ToObject(context).ToLocalChecked();
+    } else if (!pObjDef->m_StaticObj.IsEmpty()) {
+      pObj = v8::Local<v8::Object>::New(pIsolate, pObjDef->m_StaticObj);
+    }
+
+    if (!pObj.IsEmpty()) {
       if (pObjDef->m_pDestructor)
         pObjDef->m_pDestructor(pObj);
       FXJS_FreePrivate(pObj);