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

Clean merge.

TBR=tsepez@chromium.org
BUG=pdfium:242

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

(cherry picked from commit fbbb3c3de517309b6808d7a8f4c441aa0abf7065)

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

fpdfsdk/src/jsapi/fxjs_v8.cpp

index 1f8c572..dde32ce 100644 (file)
@@ -340,9 +340,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);