Title: [120002] trunk/Source/WebKit2
Revision
120002
Author
[email protected]
Date
2012-06-11 13:16:58 -0700 (Mon, 11 Jun 2012)

Log Message

Crash when a plug-in tries to use the NPRuntime API with _javascript_ disabled
https://bugs.webkit.org/show_bug.cgi?id=88797
<rdar://problem/11574844>

Reviewed by Brady Eidson.

* PluginProcess/PluginControllerProxy.cpp:
(WebKit::PluginControllerProxy::initialize):
Handle the windowNPObjectID being 0.

(WebKit::PluginControllerProxy::windowScriptNPObject):
Handle m_windownPObject being null.

* WebProcess/Plugins/PluginView.cpp:
(WebKit::PluginView::windowScriptNPObject):
Return null if _javascript_ is disabled.

(WebKit::PluginView::pluginElementNPObject):
Ditto.

Modified Paths

Diff

Modified: trunk/Source/WebKit2/ChangeLog (120001 => 120002)


--- trunk/Source/WebKit2/ChangeLog	2012-06-11 20:16:27 UTC (rev 120001)
+++ trunk/Source/WebKit2/ChangeLog	2012-06-11 20:16:58 UTC (rev 120002)
@@ -1,3 +1,25 @@
+2012-06-11  Anders Carlsson  <[email protected]>
+
+        Crash when a plug-in tries to use the NPRuntime API with _javascript_ disabled
+        https://bugs.webkit.org/show_bug.cgi?id=88797
+        <rdar://problem/11574844>
+
+        Reviewed by Brady Eidson.
+
+        * PluginProcess/PluginControllerProxy.cpp:
+        (WebKit::PluginControllerProxy::initialize):
+        Handle the windowNPObjectID being 0.
+
+        (WebKit::PluginControllerProxy::windowScriptNPObject):
+        Handle m_windownPObject being null.
+
+        * WebProcess/Plugins/PluginView.cpp:
+        (WebKit::PluginView::windowScriptNPObject):
+        Return null if _javascript_ is disabled.
+
+        (WebKit::PluginView::pluginElementNPObject):
+        Ditto.
+
 2012-06-11  Kenneth Rohde Christiansen  <[email protected]>
 
         Add QML api for setting device width and height

Modified: trunk/Source/WebKit2/PluginProcess/PluginControllerProxy.cpp (120001 => 120002)


--- trunk/Source/WebKit2/PluginProcess/PluginControllerProxy.cpp	2012-06-11 20:16:27 UTC (rev 120001)
+++ trunk/Source/WebKit2/PluginProcess/PluginControllerProxy.cpp	2012-06-11 20:16:58 UTC (rev 120002)
@@ -102,8 +102,8 @@
         return false;
     }
 
-    m_windowNPObject = m_connection->npRemoteObjectMap()->createNPObjectProxy(creationParameters.windowNPObjectID, m_plugin.get());
-    ASSERT(m_windowNPObject);
+    if (creationParameters.windowNPObjectID)
+        m_windowNPObject = m_connection->npRemoteObjectMap()->createNPObjectProxy(creationParameters.windowNPObjectID, m_plugin.get());
 
     bool returnValue = m_plugin->initialize(this, creationParameters.parameters);
 
@@ -246,6 +246,9 @@
 
 NPObject* PluginControllerProxy::windowScriptNPObject()
 {
+    if (!m_windowNPObject)
+        return 0;
+
     retainNPObject(m_windowNPObject);
     return m_windowNPObject;
 }

Modified: trunk/Source/WebKit2/WebProcess/Plugins/PluginView.cpp (120001 => 120002)


--- trunk/Source/WebKit2/WebProcess/Plugins/PluginView.cpp	2012-06-11 20:16:27 UTC (rev 120001)
+++ trunk/Source/WebKit2/WebProcess/Plugins/PluginView.cpp	2012-06-11 20:16:58 UTC (rev 120002)
@@ -1079,8 +1079,10 @@
     if (!frame())
         return 0;
 
-    // FIXME: Handle _javascript_ being disabled.
-    ASSERT(frame()->script()->canExecuteScripts(NotAboutToExecuteScript));
+    if (!frame()->script()->canExecuteScripts(NotAboutToExecuteScript)) {
+        // FIXME: Investigate if other browsers allow plug-ins to access _javascript_ objects even if _javascript_ is disabled.
+        return 0;
+    }
 
     return m_npRuntimeObjectMap.getOrCreateNPObject(*pluginWorld()->globalData(), frame()->script()->windowShell(pluginWorld())->window());
 }
@@ -1090,7 +1092,11 @@
     if (!frame())
         return 0;
 
-    // FIXME: Handle _javascript_ being disabled.
+    if (!frame()->script()->canExecuteScripts(NotAboutToExecuteScript)) {
+        // FIXME: Investigate if other browsers allow plug-ins to access _javascript_ objects even if _javascript_ is disabled.
+        return 0;
+    }
+
     JSObject* object = frame()->script()->jsObjectForPluginElement(m_pluginElement.get());
     ASSERT(object);
 
_______________________________________________
webkit-changes mailing list
[email protected]
http://lists.webkit.org/mailman/listinfo.cgi/webkit-changes

Reply via email to