AX: Should assert if we try to create two AXObjects that point to the same renderer...
authordmazzoni@google.com <dmazzoni@google.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Tue, 22 Jan 2013 08:33:45 +0000 (08:33 +0000)
committerdmazzoni@google.com <dmazzoni@google.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Tue, 22 Jan 2013 08:33:45 +0000 (08:33 +0000)
https://bugs.webkit.org/show_bug.cgi?id=107504

Reviewed by Chris Fleizach.

If two accessibility objects get created that point to the
same widget, renderer, or node, that can lead to crashes or
memory corruption later; make it assert instead of crashing.

* accessibility/AXObjectCache.cpp:
(WebCore::AXObjectCache::getOrCreate):

git-svn-id: https://svn.webkit.org/repository/webkit/trunk@140393 268f45cc-cd09-0410-ab3c-d52691b4dbfc

Source/WebCore/ChangeLog
Source/WebCore/accessibility/AXObjectCache.cpp

index 3c3c3d1..2a24dcc 100644 (file)
@@ -1,3 +1,17 @@
+2013-01-22  Dominic Mazzoni  <dmazzoni@google.com>
+
+        AX: Should assert if we try to create two AXObjects that point to the same renderer or node
+        https://bugs.webkit.org/show_bug.cgi?id=107504
+
+        Reviewed by Chris Fleizach.
+
+        If two accessibility objects get created that point to the
+        same widget, renderer, or node, that can lead to crashes or
+        memory corruption later; make it assert instead of crashing.
+
+        * accessibility/AXObjectCache.cpp:
+        (WebCore::AXObjectCache::getOrCreate):
+
 2013-01-22  Kentaro Hara  <haraken@chromium.org>
 
         [V8] Pass an Isolate to toV8()
index 079555b..215aee2 100644 (file)
@@ -305,6 +305,9 @@ AccessibilityObject* AXObjectCache::getOrCreate(Widget* widget)
         newObj = AccessibilityScrollView::create(static_cast<ScrollView*>(widget));
     else if (widget->isScrollbar())
         newObj = AccessibilityScrollbar::create(static_cast<Scrollbar*>(widget));
+
+    // Will crash later if we have two objects for the same widget.
+    ASSERT(!get(widget));
         
     getAXID(newObj.get());
     
@@ -337,6 +340,9 @@ AccessibilityObject* AXObjectCache::getOrCreate(Node* node)
 
     RefPtr<AccessibilityObject> newObj = createFromNode(node);
 
+    // Will crash later if we have two objects for the same node.
+    ASSERT(!get(node));
+
     getAXID(newObj.get());
 
     m_nodeObjectMapping.set(node, newObj->axObjectID());
@@ -358,6 +364,9 @@ AccessibilityObject* AXObjectCache::getOrCreate(RenderObject* renderer)
 
     RefPtr<AccessibilityObject> newObj = createFromRenderer(renderer);
 
+    // Will crash later if we have two objects for the same renderer.
+    ASSERT(!get(renderer));
+
     getAXID(newObj.get());
 
     m_renderObjectMapping.set(renderer, newObj->axObjectID());