CrashTracer: [REGRESSION] 1090 crashes in Safari at com.apple.JavaScriptCore: KJS...
authoroliver@apple.com <oliver@apple.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Thu, 1 Jan 2009 08:34:58 +0000 (08:34 +0000)
committeroliver@apple.com <oliver@apple.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Thu, 1 Jan 2009 08:34:58 +0000 (08:34 +0000)
<rdar://problem/5821130>

Reviewed by Cameron Zwarich.

This was caused by a plugin instance calling into JS code that removed the plugin
object.  This fix is to cache the global object locally in a ProtectedPtr so we don't
need to rely on the continued existence of the plugin instance.

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

WebCore/ChangeLog
WebCore/bridge/NP_jsobject.cpp

index 5cad9c8..e8db01a 100644 (file)
@@ -1,3 +1,20 @@
+2009-01-01  Oliver Hunt  <oliver@apple.com>
+
+        Reviewed by Cameron Zwarich.
+
+        CrashTracer: [REGRESSION] 1090 crashes in Safari at com.apple.JavaScriptCore: KJS::JSGlobalObject::stopTimeoutCheck + 0
+        <rdar://problem/5821130>
+
+        This was caused by a plugin instance calling into JS code that removed the plugin
+        object.  This fix is to cache the global object locally in a ProtectedPtr so we don't
+        need to rely on the continued existence of the plugin instance.
+
+        * bridge/NP_jsobject.cpp:
+        (_NPN_InvokeDefault):
+        (_NPN_Invoke):
+        (_NPN_Evaluate):
+        (_NPN_Construct):
+
 2008-12-31  Laszlo Gombos  <laszlo.1.gombos@nokia.com>
 
         Reviewed by Holger Freyther.
index e8676d8..11ecc3e 100644 (file)
@@ -120,9 +120,10 @@ bool _NPN_InvokeDefault(NPP, NPObject* o, const NPVariant* args, uint32_t argCou
         
         ArgList argList;
         getListFromVariantArgs(exec, args, argCount, rootObject, argList);
-        rootObject->globalObject()->startTimeoutCheck();
+        ProtectedPtr<JSGlobalObject> globalObject = rootObject->globalObject();
+        globalObject->startTimeoutCheck();
         JSValue* resultV = call(exec, function, callType, callData, function, argList);
-        rootObject->globalObject()->stopTimeoutCheck();
+        globalObject->stopTimeoutCheck();
 
         // Convert and return the result of the function call.
         convertValueToNPVariant(exec, resultV, result);
@@ -169,9 +170,10 @@ bool _NPN_Invoke(NPP npp, NPObject* o, NPIdentifier methodName, const NPVariant*
         // Call the function object.
         ArgList argList;
         getListFromVariantArgs(exec, args, argCount, rootObject, argList);
-        rootObject->globalObject()->startTimeoutCheck();
+        ProtectedPtr<JSGlobalObject> globalObject = rootObject->globalObject();
+        globalObject->startTimeoutCheck();
         JSValue* resultV = call(exec, function, callType, callData, obj->imp, argList);
-        rootObject->globalObject()->stopTimeoutCheck();
+        globalObject->stopTimeoutCheck();
 
         // Convert and return the result of the function call.
         convertValueToNPVariant(exec, resultV, result);
@@ -196,12 +198,12 @@ bool _NPN_Evaluate(NPP, NPObject* o, NPString* s, NPVariant* variant)
             return false;
 
         ExecState* exec = rootObject->globalObject()->globalExec();
-        
         JSLock lock(false);
         String scriptString = convertNPStringToUTF16(s);
-        rootObject->globalObject()->startTimeoutCheck();
-        Completion completion = JSC::evaluate(rootObject->globalObject()->globalExec(), rootObject->globalObject()->globalScopeChain(), makeSource(scriptString));
-        rootObject->globalObject()->stopTimeoutCheck();
+        ProtectedPtr<JSGlobalObject> globalObject = rootObject->globalObject();
+        globalObject->startTimeoutCheck();
+        Completion completion = JSC::evaluate(globalObject->globalExec(), globalObject->globalScopeChain(), makeSource(scriptString));
+        globalObject->stopTimeoutCheck();
         ComplType type = completion.complType();
         
         JSValue* result;
@@ -438,9 +440,10 @@ bool _NPN_Construct(NPP npp, NPObject* o, const NPVariant* args, uint32_t argCou
         
         ArgList argList;
         getListFromVariantArgs(exec, args, argCount, rootObject, argList);
-        rootObject->globalObject()->startTimeoutCheck();
+        ProtectedPtr<JSGlobalObject> globalObject = rootObject->globalObject();
+        globalObject->startTimeoutCheck();
         JSValue* resultV = construct(exec, constructor, constructType, constructData, argList);
-        rootObject->globalObject()->stopTimeoutCheck();
+        globalObject->stopTimeoutCheck();
         
         // Convert and return the result.
         convertValueToNPVariant(exec, resultV, result);