Title: [86912] branches/safari-534.36-branch/Source

Diff

Modified: branches/safari-534.36-branch/Source/_javascript_Core/API/JSContextRef.cpp (86911 => 86912)


--- branches/safari-534.36-branch/Source/_javascript_Core/API/JSContextRef.cpp	2011-05-20 01:03:13 UTC (rev 86911)
+++ branches/safari-534.36-branch/Source/_javascript_Core/API/JSContextRef.cpp	2011-05-20 01:04:09 UTC (rev 86912)
@@ -93,7 +93,7 @@
 #endif
 
     if (!globalObjectClass) {
-        JSGlobalObject* globalObject = new (globalData.get()) JSGlobalObject(*globalData);
+        JSGlobalObject* globalObject = new (globalData.get()) JSGlobalObject(*globalData, JSGlobalObject::createStructure(*globalData, jsNull()));
         return JSGlobalContextRetain(toGlobalRef(globalObject->globalExec()));
     }
 

Modified: branches/safari-534.36-branch/Source/_javascript_Core/ChangeLog (86911 => 86912)


--- branches/safari-534.36-branch/Source/_javascript_Core/ChangeLog	2011-05-20 01:03:13 UTC (rev 86911)
+++ branches/safari-534.36-branch/Source/_javascript_Core/ChangeLog	2011-05-20 01:04:09 UTC (rev 86912)
@@ -1,3 +1,32 @@
+2011-05-19  Lucas Forschler  <[email protected]
+
+    Merged r86785.
+    
+    2011-05-18  Oliver Hunt  <[email protected]>
+
+        Reviewed by Sam Weinig.
+
+        JSGlobalObject and some others do GC allocation during initialization, which can cause heap corruption
+        https://bugs.webkit.org/show_bug.cgi?id=61090
+
+        Remove the Structure-free JSGlobalObject constructor and instead always
+        pass the structure into the JSGlobalObject constructor.
+        Stop DebuggerActivation creating a new structure every time, and simply
+        use a single shared structure held by the GlobalData.
+
+        * API/JSContextRef.cpp:
+        * debugger/DebuggerActivation.cpp:
+        (JSC::DebuggerActivation::DebuggerActivation):
+        * jsc.cpp:
+        (GlobalObject::GlobalObject):
+        (functionRun):
+        (jscmain):
+        * runtime/JSGlobalData.cpp:
+        (JSC::JSGlobalData::JSGlobalData):
+        (JSC::JSGlobalData::clearBuiltinStructures):
+        * runtime/JSGlobalData.h:
+        * runtime/JSGlobalObject.h:
+
 2011-05-19  Lucas Forschler  <[email protected]>
 
     Merge r86727.

Modified: branches/safari-534.36-branch/Source/_javascript_Core/debugger/DebuggerActivation.cpp (86911 => 86912)


--- branches/safari-534.36-branch/Source/_javascript_Core/debugger/DebuggerActivation.cpp	2011-05-20 01:03:13 UTC (rev 86911)
+++ branches/safari-534.36-branch/Source/_javascript_Core/debugger/DebuggerActivation.cpp	2011-05-20 01:04:09 UTC (rev 86912)
@@ -31,7 +31,7 @@
 namespace JSC {
 
 DebuggerActivation::DebuggerActivation(JSGlobalData& globalData, JSObject* activation)
-    : JSNonFinalObject(globalData, DebuggerActivation::createStructure(globalData, jsNull()))
+    : JSNonFinalObject(globalData, globalData.debuggerActivationStructure.get())
 {
     ASSERT(activation);
     ASSERT(activation->isActivationObject());

Modified: branches/safari-534.36-branch/Source/_javascript_Core/jsc.cpp (86911 => 86912)


--- branches/safari-534.36-branch/Source/_javascript_Core/jsc.cpp	2011-05-20 01:03:13 UTC (rev 86911)
+++ branches/safari-534.36-branch/Source/_javascript_Core/jsc.cpp	2011-05-20 01:04:09 UTC (rev 86912)
@@ -141,14 +141,14 @@
 
 class GlobalObject : public JSGlobalObject {
 public:
-    GlobalObject(JSGlobalData&, const Vector<UString>& arguments);
+    GlobalObject(JSGlobalData&, Structure*, const Vector<UString>& arguments);
     virtual UString className() const { return "global"; }
 };
 COMPILE_ASSERT(!IsInteger<GlobalObject>::value, WTF_IsInteger_GlobalObject_false);
 ASSERT_CLASS_FITS_IN_CELL(GlobalObject);
 
-GlobalObject::GlobalObject(JSGlobalData& globalData, const Vector<UString>& arguments)
-    : JSGlobalObject(globalData)
+GlobalObject::GlobalObject(JSGlobalData& globalData, Structure* structure, const Vector<UString>& arguments)
+    : JSGlobalObject(globalData, structure)
 {
     putDirectFunction(globalExec(), new (globalExec()) JSFunction(globalExec(), this, functionStructure(), 1, Identifier(globalExec(), "debug"), functionDebug));
     putDirectFunction(globalExec(), new (globalExec()) JSFunction(globalExec(), this, functionStructure(), 1, Identifier(globalExec(), "print"), functionPrint));
@@ -212,7 +212,7 @@
     if (!fillBufferWithContentsOfFile(fileName, script))
         return JSValue::encode(throwError(exec, createError(exec, "Could not open file.")));
 
-    GlobalObject* globalObject = new (&exec->globalData()) GlobalObject(exec->globalData(), Vector<UString>());
+    GlobalObject* globalObject = new (&exec->globalData()) GlobalObject(exec->globalData(), GlobalObject::createStructure(exec->globalData(), jsNull()), Vector<UString>());
 
     StopWatch stopWatch;
     stopWatch.start();
@@ -537,7 +537,7 @@
     Options options;
     parseArguments(argc, argv, options, globalData);
 
-    GlobalObject* globalObject = new (globalData) GlobalObject(*globalData, options.arguments);
+    GlobalObject* globalObject = new (globalData) GlobalObject(*globalData, GlobalObject::createStructure(*globalData, jsNull()), options.arguments);
     bool success = runWithScripts(globalObject, options.scripts, options.dump);
     if (options.interactive && success)
         runInteractive(globalObject);

Modified: branches/safari-534.36-branch/Source/_javascript_Core/runtime/JSGlobalData.cpp (86911 => 86912)


--- branches/safari-534.36-branch/Source/_javascript_Core/runtime/JSGlobalData.cpp	2011-05-20 01:03:13 UTC (rev 86911)
+++ branches/safari-534.36-branch/Source/_javascript_Core/runtime/JSGlobalData.cpp	2011-05-20 01:04:09 UTC (rev 86912)
@@ -32,6 +32,7 @@
 #include "ArgList.h"
 #include "Heap.h"
 #include "CommonIdentifiers.h"
+#include "DebuggerActivation.h"
 #include "FunctionConstructor.h"
 #include "GetterSetter.h"
 #include "Interpreter.h"
@@ -200,6 +201,7 @@
     IdentifierTable* existingEntryIdentifierTable = wtfThreadData().setCurrentIdentifierTable(identifierTable);
     JSLock lock(SilenceAssertionsOnly);
     structureStructure.set(*this, Structure::createStructure(*this));
+    debuggerActivationStructure.set(*this, DebuggerActivation::createStructure(*this, jsNull()));
     activationStructure.set(*this, JSActivation::createStructure(*this, jsNull()));
     interruptedExecutionErrorStructure.set(*this, JSNonFinalObject::createStructure(*this, jsNull()));
     terminatedExecutionErrorStructure.set(*this, JSNonFinalObject::createStructure(*this, jsNull()));
@@ -259,6 +261,7 @@
 void JSGlobalData::clearBuiltinStructures()
 {
     structureStructure.clear();
+    debuggerActivationStructure.clear();
     activationStructure.clear();
     interruptedExecutionErrorStructure.clear();
     terminatedExecutionErrorStructure.clear();

Modified: branches/safari-534.36-branch/Source/_javascript_Core/runtime/JSGlobalData.h (86911 => 86912)


--- branches/safari-534.36-branch/Source/_javascript_Core/runtime/JSGlobalData.h	2011-05-20 01:03:13 UTC (rev 86911)
+++ branches/safari-534.36-branch/Source/_javascript_Core/runtime/JSGlobalData.h	2011-05-20 01:04:09 UTC (rev 86912)
@@ -156,6 +156,7 @@
         const HashTable* stringConstructorTable;
         
         Strong<Structure> structureStructure;
+        Strong<Structure> debuggerActivationStructure;
         Strong<Structure> activationStructure;
         Strong<Structure> interruptedExecutionErrorStructure;
         Strong<Structure> terminatedExecutionErrorStructure;

Modified: branches/safari-534.36-branch/Source/_javascript_Core/runtime/JSGlobalObject.h (86911 => 86912)


--- branches/safari-534.36-branch/Source/_javascript_Core/runtime/JSGlobalObject.h	2011-05-20 01:03:13 UTC (rev 86911)
+++ branches/safari-534.36-branch/Source/_javascript_Core/runtime/JSGlobalObject.h	2011-05-20 01:04:09 UTC (rev 86912)
@@ -123,19 +123,7 @@
 
     public:
         void* operator new(size_t, JSGlobalData*);
-        
-        explicit JSGlobalObject(JSGlobalData& globalData)
-            : JSVariableObject(globalData, JSGlobalObject::createStructure(globalData, jsNull()), &m_symbolTable, 0)
-            , m_registerArraySize(0)
-            , m_globalScopeChain()
-            , m_weakRandom(static_cast<unsigned>(randomNumber() * (std::numeric_limits<unsigned>::max() + 1.0)))
-            , m_isEvalEnabled(true)
-        {
-            COMPILE_ASSERT(JSGlobalObject::AnonymousSlotCount == 1, JSGlobalObject_has_only_a_single_slot);
-            putThisToAnonymousValue(0);
-            init(this);
-        }
-        
+
         explicit JSGlobalObject(JSGlobalData& globalData, Structure* structure)
             : JSVariableObject(globalData, structure, &m_symbolTable, 0)
             , m_registerArraySize(0)

Modified: branches/safari-534.36-branch/Source/WebCore/ChangeLog (86911 => 86912)


--- branches/safari-534.36-branch/Source/WebCore/ChangeLog	2011-05-20 01:03:13 UTC (rev 86911)
+++ branches/safari-534.36-branch/Source/WebCore/ChangeLog	2011-05-20 01:04:09 UTC (rev 86912)
@@ -1,5 +1,35 @@
 2011-05-19  Lucas Forschler  <[email protected]
 
+    Merged r86785.
+    
+    2011-05-18  Oliver Hunt  <[email protected]>
+
+        Reviewed by Sam Weinig.
+
+        JSGlobalObject and some others do GC allocation during initialization, which can cause heap corruption
+        https://bugs.webkit.org/show_bug.cgi?id=61090
+
+        Rather than having Constructor objects create their structure
+        as part of initialisation, we now pass their expected structure
+        in as an argument.  This required fixing the few custom Constructors
+        and the code generator.
+
+        * bindings/js/JSAudioConstructor.cpp:
+        (WebCore::JSAudioConstructor::JSAudioConstructor):
+        * bindings/js/JSAudioConstructor.h:
+        * bindings/js/JSDOMGlobalObject.h:
+        (WebCore::getDOMConstructor):
+          Pass the Constructor objects structure in as an argument
+        * bindings/js/JSImageConstructor.cpp:
+        (WebCore::JSImageConstructor::JSImageConstructor):
+        * bindings/js/JSImageConstructor.h:
+        * bindings/js/JSOptionConstructor.cpp:
+        (WebCore::JSOptionConstructor::JSOptionConstructor):
+        * bindings/js/JSOptionConstructor.h:
+        * bindings/scripts/CodeGeneratorJS.pm:
+
+2011-05-19  Lucas Forschler  <[email protected]
+
     Merged r86748.
     
     2011-05-18  Abhishek Arya  <[email protected]>

Modified: branches/safari-534.36-branch/Source/WebCore/bindings/js/JSAudioConstructor.cpp (86911 => 86912)


--- branches/safari-534.36-branch/Source/WebCore/bindings/js/JSAudioConstructor.cpp	2011-05-20 01:03:13 UTC (rev 86911)
+++ branches/safari-534.36-branch/Source/WebCore/bindings/js/JSAudioConstructor.cpp	2011-05-20 01:04:09 UTC (rev 86912)
@@ -39,8 +39,8 @@
 
 const ClassInfo JSAudioConstructor::s_info = { "AudioConstructor", &DOMConstructorWithDocument::s_info, 0, 0 };
 
-JSAudioConstructor::JSAudioConstructor(ExecState* exec, JSDOMGlobalObject* globalObject)
-    : DOMConstructorWithDocument(JSAudioConstructor::createStructure(globalObject->globalData(), globalObject->objectPrototype()), globalObject)
+JSAudioConstructor::JSAudioConstructor(ExecState* exec, Structure* structure, JSDOMGlobalObject* globalObject)
+    : DOMConstructorWithDocument(structure, globalObject)
 {
     ASSERT(inherits(&s_info));
     putDirect(exec->globalData(), exec->propertyNames().prototype, JSHTMLAudioElementPrototype::self(exec, globalObject), None);

Modified: branches/safari-534.36-branch/Source/WebCore/bindings/js/JSAudioConstructor.h (86911 => 86912)


--- branches/safari-534.36-branch/Source/WebCore/bindings/js/JSAudioConstructor.h	2011-05-20 01:03:13 UTC (rev 86911)
+++ branches/safari-534.36-branch/Source/WebCore/bindings/js/JSAudioConstructor.h	2011-05-20 01:04:09 UTC (rev 86912)
@@ -36,7 +36,7 @@
 
     class JSAudioConstructor : public DOMConstructorWithDocument {
     public:
-        JSAudioConstructor(JSC::ExecState*, JSDOMGlobalObject*);
+        JSAudioConstructor(JSC::ExecState*, JSC::Structure*, JSDOMGlobalObject*);
 
         static JSC::Structure* createStructure(JSC::JSGlobalData& globalData, JSC::JSValue prototype)
         {

Modified: branches/safari-534.36-branch/Source/WebCore/bindings/js/JSDOMGlobalObject.h (86911 => 86912)


--- branches/safari-534.36-branch/Source/WebCore/bindings/js/JSDOMGlobalObject.h	2011-05-20 01:03:13 UTC (rev 86911)
+++ branches/safari-534.36-branch/Source/WebCore/bindings/js/JSDOMGlobalObject.h	2011-05-20 01:04:09 UTC (rev 86912)
@@ -88,7 +88,7 @@
     {
         if (JSC::JSObject* constructor = const_cast<JSDOMGlobalObject*>(globalObject)->constructors().get(&ConstructorClass::s_info).get())
             return constructor;
-        JSC::JSObject* constructor = new (exec) ConstructorClass(exec, const_cast<JSDOMGlobalObject*>(globalObject));
+        JSC::JSObject* constructor = new (exec) ConstructorClass(exec, ConstructorClass::createStructure(exec->globalData(), globalObject->objectPrototype()), const_cast<JSDOMGlobalObject*>(globalObject));
         ASSERT(!const_cast<JSDOMGlobalObject*>(globalObject)->constructors().contains(&ConstructorClass::s_info));
         JSC::WriteBarrier<JSC::JSObject> temp;
         const_cast<JSDOMGlobalObject*>(globalObject)->constructors().add(&ConstructorClass::s_info, temp).first->second.set(exec->globalData(), globalObject, constructor);

Modified: branches/safari-534.36-branch/Source/WebCore/bindings/js/JSImageConstructor.cpp (86911 => 86912)


--- branches/safari-534.36-branch/Source/WebCore/bindings/js/JSImageConstructor.cpp	2011-05-20 01:03:13 UTC (rev 86911)
+++ branches/safari-534.36-branch/Source/WebCore/bindings/js/JSImageConstructor.cpp	2011-05-20 01:04:09 UTC (rev 86912)
@@ -34,8 +34,8 @@
 
 const ClassInfo JSImageConstructor::s_info = { "ImageConstructor", &DOMConstructorWithDocument::s_info, 0, 0 };
 
-JSImageConstructor::JSImageConstructor(ExecState* exec, JSDOMGlobalObject* globalObject)
-    : DOMConstructorWithDocument(JSImageConstructor::createStructure(globalObject->globalData(), globalObject->objectPrototype()), globalObject)
+JSImageConstructor::JSImageConstructor(ExecState* exec, Structure* structure, JSDOMGlobalObject* globalObject)
+    : DOMConstructorWithDocument(structure, globalObject)
 {
     ASSERT(inherits(&s_info));
     putDirect(exec->globalData(), exec->propertyNames().prototype, JSHTMLImageElementPrototype::self(exec, globalObject), None);

Modified: branches/safari-534.36-branch/Source/WebCore/bindings/js/JSImageConstructor.h (86911 => 86912)


--- branches/safari-534.36-branch/Source/WebCore/bindings/js/JSImageConstructor.h	2011-05-20 01:03:13 UTC (rev 86911)
+++ branches/safari-534.36-branch/Source/WebCore/bindings/js/JSImageConstructor.h	2011-05-20 01:04:09 UTC (rev 86912)
@@ -27,7 +27,7 @@
 
     class JSImageConstructor : public DOMConstructorWithDocument {
     public:
-        JSImageConstructor(JSC::ExecState*, JSDOMGlobalObject*);
+        JSImageConstructor(JSC::ExecState*, JSC::Structure*, JSDOMGlobalObject*);
 
         static JSC::Structure* createStructure(JSC::JSGlobalData& globalData, JSC::JSValue prototype)
         {

Modified: branches/safari-534.36-branch/Source/WebCore/bindings/js/JSOptionConstructor.cpp (86911 => 86912)


--- branches/safari-534.36-branch/Source/WebCore/bindings/js/JSOptionConstructor.cpp	2011-05-20 01:03:13 UTC (rev 86911)
+++ branches/safari-534.36-branch/Source/WebCore/bindings/js/JSOptionConstructor.cpp	2011-05-20 01:04:09 UTC (rev 86912)
@@ -35,8 +35,8 @@
 
 const ClassInfo JSOptionConstructor::s_info = { "OptionConstructor", &DOMConstructorWithDocument::s_info, 0, 0 };
 
-JSOptionConstructor::JSOptionConstructor(ExecState* exec, JSDOMGlobalObject* globalObject)
-    : DOMConstructorWithDocument(JSOptionConstructor::createStructure(globalObject->globalData(), globalObject->objectPrototype()), globalObject)
+JSOptionConstructor::JSOptionConstructor(ExecState* exec, Structure* structure, JSDOMGlobalObject* globalObject)
+    : DOMConstructorWithDocument(structure, globalObject)
 {
     ASSERT(inherits(&s_info));
     putDirect(exec->globalData(), exec->propertyNames().prototype, JSHTMLOptionElementPrototype::self(exec, globalObject), None);

Modified: branches/safari-534.36-branch/Source/WebCore/bindings/js/JSOptionConstructor.h (86911 => 86912)


--- branches/safari-534.36-branch/Source/WebCore/bindings/js/JSOptionConstructor.h	2011-05-20 01:03:13 UTC (rev 86911)
+++ branches/safari-534.36-branch/Source/WebCore/bindings/js/JSOptionConstructor.h	2011-05-20 01:04:09 UTC (rev 86912)
@@ -28,7 +28,7 @@
 
     class JSOptionConstructor : public DOMConstructorWithDocument {
     public:
-        JSOptionConstructor(JSC::ExecState*, JSDOMGlobalObject*);
+        JSOptionConstructor(JSC::ExecState*, JSC::Structure*, JSDOMGlobalObject*);
 
         static JSC::Structure* createStructure(JSC::JSGlobalData& globalData, JSC::JSValue prototype)
         {

Modified: branches/safari-534.36-branch/Source/WebCore/bindings/scripts/CodeGeneratorJS.pm (86911 => 86912)


--- branches/safari-534.36-branch/Source/WebCore/bindings/scripts/CodeGeneratorJS.pm	2011-05-20 01:03:13 UTC (rev 86911)
+++ branches/safari-534.36-branch/Source/WebCore/bindings/scripts/CodeGeneratorJS.pm	2011-05-20 01:04:09 UTC (rev 86912)
@@ -2974,7 +2974,7 @@
 
     push(@$outputArray, "class ${constructorClassName} : public DOMConstructorObject {\n");
     push(@$outputArray, "public:\n");
-    push(@$outputArray, "    ${constructorClassName}(JSC::ExecState*, JSDOMGlobalObject*);\n\n");
+    push(@$outputArray, "    ${constructorClassName}(JSC::ExecState*, JSC::Structure*, JSDOMGlobalObject*);\n\n");
 
     push(@$outputArray, "    virtual bool getOwnPropertySlot(JSC::ExecState*, const JSC::Identifier&, JSC::PropertySlot&);\n");
     push(@$outputArray, "    virtual bool getOwnPropertyDescriptor(JSC::ExecState*, const JSC::Identifier&, JSC::PropertyDescriptor&);\n");
@@ -3013,8 +3013,8 @@
 
     push(@$outputArray, "const ClassInfo ${constructorClassName}::s_info = { \"${visibleClassName}Constructor\", &DOMConstructorObject::s_info, &${constructorClassName}Table, 0 };\n\n");
 
-    push(@$outputArray, "${constructorClassName}::${constructorClassName}(ExecState* exec, JSDOMGlobalObject* globalObject)\n");
-    push(@$outputArray, "    : DOMConstructorObject(${constructorClassName}::createStructure(globalObject->globalData(), globalObject->objectPrototype()), globalObject)\n");
+    push(@$outputArray, "${constructorClassName}::${constructorClassName}(ExecState* exec, Structure* structure, JSDOMGlobalObject* globalObject)\n");
+    push(@$outputArray, "    : DOMConstructorObject(structure, globalObject)\n");
     push(@$outputArray, "{\n");
     push(@$outputArray, "    ASSERT(inherits(&s_info));\n");
     if ($interfaceName eq "DOMWindow") {
_______________________________________________
webkit-changes mailing list
[email protected]
http://lists.webkit.org/mailman/listinfo.cgi/webkit-changes

Reply via email to