Title: [133479] trunk/Source/WebCore
Revision
133479
Author
[email protected]
Date
2012-11-05 08:14:27 -0800 (Mon, 05 Nov 2012)

Log Message

[V8] Dispose() and Clear() should be always coupled for safety
https://bugs.webkit.org/show_bug.cgi?id=101191

Reviewed by Adam Barth.

Clear() is not mandatory. However, to avoid misusing already
disposed wrappers, Clear() should be always called just
after Dispose().

No tests. No change in behavior.

* bindings/v8/DOMWrapperMap.h:
(WebCore::DOMWrapperHashMap::defaultWeakCallback):
* bindings/v8/IntrusiveDOMWrapperMap.h:
(WebCore::IntrusiveDOMWrapperMap::weakCallback):
* bindings/v8/NPV8Object.cpp:
(WebCore::freeV8NPObject):
* bindings/v8/ScheduledAction.cpp:
(WebCore::ScheduledAction::~ScheduledAction):
* bindings/v8/V8NPObject.cpp:
(WebCore::V8NPTemplateMap::dispose):
(WebCore::weakNPObjectCallback):
(WebCore::forgetV8ObjectForNPObject):
* bindings/v8/V8PerContextData.cpp:
(WebCore::V8PerContextData::dispose):
* bindings/v8/V8ValueCache.cpp:
(WebCore::cachedStringCallback):
(WebCore::IntegerCache::~IntegerCache):
* bindings/v8/custom/V8InjectedScriptManager.cpp:
(WebCore::WeakReferenceCallback):

Modified Paths

Diff

Modified: trunk/Source/WebCore/ChangeLog (133478 => 133479)


--- trunk/Source/WebCore/ChangeLog	2012-11-05 15:56:43 UTC (rev 133478)
+++ trunk/Source/WebCore/ChangeLog	2012-11-05 16:14:27 UTC (rev 133479)
@@ -1,3 +1,36 @@
+2012-11-05  Kentaro Hara  <[email protected]>
+
+        [V8] Dispose() and Clear() should be always coupled for safety
+        https://bugs.webkit.org/show_bug.cgi?id=101191
+
+        Reviewed by Adam Barth.
+
+        Clear() is not mandatory. However, to avoid misusing already
+        disposed wrappers, Clear() should be always called just
+        after Dispose().
+
+        No tests. No change in behavior.
+
+        * bindings/v8/DOMWrapperMap.h:
+        (WebCore::DOMWrapperHashMap::defaultWeakCallback):
+        * bindings/v8/IntrusiveDOMWrapperMap.h:
+        (WebCore::IntrusiveDOMWrapperMap::weakCallback):
+        * bindings/v8/NPV8Object.cpp:
+        (WebCore::freeV8NPObject):
+        * bindings/v8/ScheduledAction.cpp:
+        (WebCore::ScheduledAction::~ScheduledAction):
+        * bindings/v8/V8NPObject.cpp:
+        (WebCore::V8NPTemplateMap::dispose):
+        (WebCore::weakNPObjectCallback):
+        (WebCore::forgetV8ObjectForNPObject):
+        * bindings/v8/V8PerContextData.cpp:
+        (WebCore::V8PerContextData::dispose):
+        * bindings/v8/V8ValueCache.cpp:
+        (WebCore::cachedStringCallback):
+        (WebCore::IntegerCache::~IntegerCache):
+        * bindings/v8/custom/V8InjectedScriptManager.cpp:
+        (WebCore::WeakReferenceCallback):
+
 2012-11-05  Hans Muller  <[email protected]>
 
         [CSS Exclusions] Layout of the first shape-inside line can be incorrect

Modified: trunk/Source/WebCore/bindings/v8/DOMWrapperMap.h (133478 => 133479)


--- trunk/Source/WebCore/bindings/v8/DOMWrapperMap.h	2012-11-05 15:56:43 UTC (rev 133478)
+++ trunk/Source/WebCore/bindings/v8/DOMWrapperMap.h	2012-11-05 16:14:27 UTC (rev 133479)
@@ -82,6 +82,7 @@
             v8::Persistent<v8::Object> wrapper = it->value;
             toWrapperTypeInfo(wrapper)->derefObject(it->key);
             wrapper.Dispose();
+            wrapper.Clear();
         }
         m_map.clear();
     }
@@ -111,6 +112,7 @@
 
         map->remove(key, wrapper);
         wrapper.Dispose();
+        wrapper.Clear();
         type->derefObject(key);
     }
 

Modified: trunk/Source/WebCore/bindings/v8/IntrusiveDOMWrapperMap.h (133478 => 133479)


--- trunk/Source/WebCore/bindings/v8/IntrusiveDOMWrapperMap.h	2012-11-05 15:56:43 UTC (rev 133478)
+++ trunk/Source/WebCore/bindings/v8/IntrusiveDOMWrapperMap.h	2012-11-05 16:14:27 UTC (rev 133479)
@@ -70,6 +70,7 @@
 
         key->clearWrapper();
         value.Dispose();
+        value.Clear();
         key->deref();
     }
 };

Modified: trunk/Source/WebCore/bindings/v8/NPV8Object.cpp (133478 => 133479)


--- trunk/Source/WebCore/bindings/v8/NPV8Object.cpp	2012-11-05 15:56:43 UTC (rev 133478)
+++ trunk/Source/WebCore/bindings/v8/NPV8Object.cpp	2012-11-05 16:14:27 UTC (rev 133479)
@@ -92,6 +92,7 @@
             v8NPObjectMap->remove(v8ObjectHash);
     }
     v8NpObject->v8Object.Dispose();
+    v8NpObject->v8Object.Clear();
     free(v8NpObject);
 }
 

Modified: trunk/Source/WebCore/bindings/v8/ScheduledAction.cpp (133478 => 133479)


--- trunk/Source/WebCore/bindings/v8/ScheduledAction.cpp	2012-11-05 15:56:43 UTC (rev 133478)
+++ trunk/Source/WebCore/bindings/v8/ScheduledAction.cpp	2012-11-05 16:14:27 UTC (rev 133479)
@@ -62,8 +62,10 @@
 
 ScheduledAction::~ScheduledAction()
 {
-    for (size_t i = 0; i < m_args.size(); ++i)
+    for (size_t i = 0; i < m_args.size(); ++i) {
         m_args[i].Dispose();
+        m_args[i].Clear();
+    }
 }
 
 void ScheduledAction::execute(ScriptExecutionContext* context)

Modified: trunk/Source/WebCore/bindings/v8/V8NPObject.cpp (133478 => 133479)


--- trunk/Source/WebCore/bindings/v8/V8NPObject.cpp	2012-11-05 15:56:43 UTC (rev 133478)
+++ trunk/Source/WebCore/bindings/v8/V8NPObject.cpp	2012-11-05 16:14:27 UTC (rev 133479)
@@ -196,6 +196,7 @@
         MapType::iterator it = m_map.find(key);
         ASSERT(it != m_map.end());
         it->value.Dispose();
+        it->value.Clear();
         m_map.remove(it);
     }
 
@@ -397,6 +398,7 @@
     // call forgetV8ObjectForNPObject, which uses the table as well.
     staticNPObjectMap().remove(npObject, wrapper);
     wrapper.Dispose();
+    wrapper.Clear();
 
     if (_NPN_IsAlive(npObject))
         _NPN_ReleaseObject(npObject);
@@ -459,6 +461,7 @@
         V8DOMWrapper::setDOMWrapper(wrapper, npObjectTypeInfo(), 0);
         staticNPObjectMap().remove(object, wrapper);
         wrapper.Dispose();
+        wrapper.Clear();
         _NPN_ReleaseObject(object);
     }
 }

Modified: trunk/Source/WebCore/bindings/v8/V8PerContextData.cpp (133478 => 133479)


--- trunk/Source/WebCore/bindings/v8/V8PerContextData.cpp	2012-11-05 15:56:43 UTC (rev 133478)
+++ trunk/Source/WebCore/bindings/v8/V8PerContextData.cpp	2012-11-05 16:14:27 UTC (rev 133479)
@@ -55,6 +55,7 @@
         for (; it != m_wrapperBoilerplates.end(); ++it) {
             v8::Persistent<v8::Object> wrapper = it->value;
             wrapper.Dispose();
+            wrapper.Clear();
         }
         m_wrapperBoilerplates.clear();
     }
@@ -64,6 +65,7 @@
         for (; it != m_constructorMap.end(); ++it) {
             v8::Persistent<v8::Function> wrapper = it->value;
             wrapper.Dispose();
+            wrapper.Clear();
         }
         m_constructorMap.clear();
     }

Modified: trunk/Source/WebCore/bindings/v8/V8ValueCache.cpp (133478 => 133479)


--- trunk/Source/WebCore/bindings/v8/V8ValueCache.cpp	2012-11-05 15:56:43 UTC (rev 133478)
+++ trunk/Source/WebCore/bindings/v8/V8ValueCache.cpp	2012-11-05 16:14:27 UTC (rev 133479)
@@ -46,6 +46,7 @@
     StringImpl* stringImpl = static_cast<StringImpl*>(parameter);
     V8PerIsolateData::current()->stringCache()->remove(stringImpl);
     wrapper.Dispose();
+    wrapper.Clear();
     stringImpl->deref();
 }
 
@@ -113,8 +114,10 @@
 IntegerCache::~IntegerCache()
 {
     if (m_initialized) {
-        for (int value = 0; value < numberOfCachedSmallIntegers; value++)
+        for (int value = 0; value < numberOfCachedSmallIntegers; value++) {
             m_smallIntegers[value].Dispose();
+            m_smallIntegers[value].Clear();
+        }
         m_initialized = false;
     }
 }

Modified: trunk/Source/WebCore/bindings/v8/custom/V8InjectedScriptManager.cpp (133478 => 133479)


--- trunk/Source/WebCore/bindings/v8/custom/V8InjectedScriptManager.cpp	2012-11-05 15:56:43 UTC (rev 133478)
+++ trunk/Source/WebCore/bindings/v8/custom/V8InjectedScriptManager.cpp	2012-11-05 16:14:27 UTC (rev 133479)
@@ -49,6 +49,7 @@
     InjectedScriptHost* nativeObject = static_cast<InjectedScriptHost*>(parameter);
     nativeObject->deref();
     object.Dispose();
+    object.Clear();
 }
 
 static v8::Local<v8::Object> createInjectedScriptHostV8Wrapper(InjectedScriptHost* host)
_______________________________________________
webkit-changes mailing list
[email protected]
http://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to