[SCM] WebKit Debian packaging branch, webkit-1.1, updated. upstream/1.1.21-584-g1e41756

japhet at chromium.org japhet at chromium.org
Fri Feb 26 22:24:40 UTC 2010


The following commit has been merged in the webkit-1.1 branch:
commit 941edb931db21a4f4cea49e557bcb477d3e17d9d
Author: japhet at chromium.org <japhet at chromium.org@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Date:   Thu Feb 18 17:04:37 2010 +0000

    2010-02-18  Nate Chapin  <japhet at chromium.org>
    
            Reviewed by Eric Seidel.
    
            [V8] Correctly handle the case where the event field on the
            global object is a v8::Object, but not a DOM wrapper.
    
            https://bugs.webkit.org/show_bug.cgi?id=34899
    
            Test: fast/dom/Window/window-event-override-no-crash.html
    
            * bindings/v8/ScriptController.cpp:
            (WebCore::ScriptController::processingUserGesture):
            * bindings/v8/V8DOMWrapper.cpp:
            (WebCore::V8DOMWrapper::isValidDOMObject):
            (WebCore::V8DOMWrapper::isWrapperOfType):
            * bindings/v8/V8DOMWrapper.h:
    
    
    git-svn-id: http://svn.webkit.org/repository/webkit/trunk@54964 268f45cc-cd09-0410-ab3c-d52691b4dbfc

diff --git a/LayoutTests/ChangeLog b/LayoutTests/ChangeLog
index a763979..62c466d 100644
--- a/LayoutTests/ChangeLog
+++ b/LayoutTests/ChangeLog
@@ -1,3 +1,12 @@
+2010-02-18  Nate Chapin  <japhet at chromium.org>
+
+        Reviewed by Eric Seidel.
+
+        Test for https://bugs.webkit.org/show_bug.cgi?id=34899
+
+        * fast/dom/Window/window-event-override-no-crash-expected.txt: Added.
+        * fast/dom/Window/window-event-override-no-crash.html: Added.
+
 2010-02-18  Andras Becsi  <abecsi at webkit.org>
 
         Rubber-stamped by Kenneth Rohde Christiansen.
diff --git a/WebCore/ChangeLog b/WebCore/ChangeLog
index 5d68ff1..b28a255 100644
--- a/WebCore/ChangeLog
+++ b/WebCore/ChangeLog
@@ -1,3 +1,21 @@
+2010-02-18  Nate Chapin  <japhet at chromium.org>
+
+        Reviewed by Eric Seidel.
+
+        [V8] Correctly handle the case where the event field on the
+        global object is a v8::Object, but not a DOM wrapper.
+
+        https://bugs.webkit.org/show_bug.cgi?id=34899
+
+        Test: fast/dom/Window/window-event-override-no-crash.html
+
+        * bindings/v8/ScriptController.cpp:
+        (WebCore::ScriptController::processingUserGesture):
+        * bindings/v8/V8DOMWrapper.cpp:
+        (WebCore::V8DOMWrapper::isValidDOMObject):
+        (WebCore::V8DOMWrapper::isWrapperOfType):
+        * bindings/v8/V8DOMWrapper.h:
+
 2010-02-18  Pavel Feldman  <pfeldman at chromium.org>
 
         Not reviewed, Qt build fix.
diff --git a/WebCore/bindings/v8/ScriptController.cpp b/WebCore/bindings/v8/ScriptController.cpp
index e2b886d..838668a 100644
--- a/WebCore/bindings/v8/ScriptController.cpp
+++ b/WebCore/bindings/v8/ScriptController.cpp
@@ -171,7 +171,7 @@ bool ScriptController::processingUserGesture(DOMWrapperWorld*) const
 
     v8::Handle<v8::Object> global = v8Context->Global();
     v8::Handle<v8::Value> jsEvent = global->Get(v8::String::NewSymbol("event"));
-    Event* event = (!jsEvent.IsEmpty() && jsEvent->IsObject()) ? V8Event::toNative(v8::Handle<v8::Object>::Cast(jsEvent)) : 0;
+    Event* event = V8DOMWrapper::isValidDOMObject(jsEvent) ? V8Event::toNative(v8::Handle<v8::Object>::Cast(jsEvent)) : 0;
 
     // Based on code from kjs_bindings.cpp.
     // Note: This is more liberal than Firefox's implementation.
diff --git a/WebCore/bindings/v8/V8DOMWrapper.cpp b/WebCore/bindings/v8/V8DOMWrapper.cpp
index 1605417..30775fa 100644
--- a/WebCore/bindings/v8/V8DOMWrapper.cpp
+++ b/WebCore/bindings/v8/V8DOMWrapper.cpp
@@ -327,15 +327,19 @@ bool V8DOMWrapper::maybeDOMWrapper(v8::Handle<v8::Value> value)
 }
 #endif
 
-bool V8DOMWrapper::isWrapperOfType(v8::Handle<v8::Value> value, V8ClassIndex::V8WrapperType classType)
+bool V8DOMWrapper::isValidDOMObject(v8::Handle<v8::Value> value)
 {
     if (value.IsEmpty() || !value->IsObject())
         return false;
+    return v8::Handle<v8::Object>::Cast(value)->InternalFieldCount();
+}
 
-    v8::Handle<v8::Object> object = v8::Handle<v8::Object>::Cast(value);
-    if (!object->InternalFieldCount())
+bool V8DOMWrapper::isWrapperOfType(v8::Handle<v8::Value> value, V8ClassIndex::V8WrapperType classType)
+{
+    if (!isValidDOMObject(value))
         return false;
 
+    v8::Handle<v8::Object> object = v8::Handle<v8::Object>::Cast(value);
     ASSERT(object->InternalFieldCount() >= v8DefaultWrapperInternalFieldCount);
 
     v8::Handle<v8::Value> wrapper = object->GetInternalField(v8DOMWrapperObjectIndex);
diff --git a/WebCore/bindings/v8/V8DOMWrapper.h b/WebCore/bindings/v8/V8DOMWrapper.h
index 78e9ae2..d900466 100644
--- a/WebCore/bindings/v8/V8DOMWrapper.h
+++ b/WebCore/bindings/v8/V8DOMWrapper.h
@@ -179,6 +179,8 @@ namespace WebCore {
         static void setJSWrapperForActiveDOMObject(void*, v8::Persistent<v8::Object>);
         static void setJSWrapperForDOMNode(Node*, v8::Persistent<v8::Object>);
 
+        static bool isValidDOMObject(v8::Handle<v8::Value>);
+
         // Check whether a V8 value is a wrapper of type |classType|.
         static bool isWrapperOfType(v8::Handle<v8::Value>, V8ClassIndex::V8WrapperType);
 

-- 
WebKit Debian packaging



More information about the Pkg-webkit-commits mailing list