diff options
| author | Allan Sandfeld Jensen <allan.jensen@digia.com> | 2013-05-15 13:31:58 +0200 |
|---|---|---|
| committer | The Qt Project <gerrit-noreply@qt-project.org> | 2013-05-21 11:15:10 +0200 |
| commit | 49cede6e71305d56c3cd30962559d6b1f39365e7 (patch) | |
| tree | a7b2f6970a72488c0276b40c84b7b59f2000865d | |
| parent | 185a6ea555f2e647a0971f9a98dcad3986202dbc (diff) | |
| download | qtwebkit-49cede6e71305d56c3cd30962559d6b1f39365e7.tar.gz | |
Crash when calling QWebFrame::evaluateJavaScript
https://bugs.webkit.org/show_bug.cgi?id=113434
Reviewed by Simon Hausmann.
We must take the JS API lock before accessing internal JS methods.
* bridge/qt/qt_runtime.cpp:
(JSC::Bindings::unwrapBoxedPrimitive):
(JSC::Bindings::getGregorianDateTimeUTC):
(JSC::Bindings::convertQVariantToValue):
Change-Id: Id06381d1a68da8e33020da7960e6b6943fd374f1
git-svn-id: http://svn.webkit.org/repository/webkit/trunk@149521 268f45cc-cd09-0410-ab3c-d52691b4dbfc
Reviewed-by: Jocelyn Turcotte <jocelyn.turcotte@digia.com>
| -rw-r--r-- | Source/WebCore/bridge/qt/qt_runtime.cpp | 9 |
1 files changed, 8 insertions, 1 deletions
diff --git a/Source/WebCore/bridge/qt/qt_runtime.cpp b/Source/WebCore/bridge/qt/qt_runtime.cpp index 270945d13..bb63d6695 100644 --- a/Source/WebCore/bridge/qt/qt_runtime.cpp +++ b/Source/WebCore/bridge/qt/qt_runtime.cpp @@ -21,6 +21,7 @@ #include "qt_runtime.h" #include "APICast.h" +#include "APIShims.h" #include "BooleanObject.h" #include "DateInstance.h" #include "DatePrototype.h" @@ -199,8 +200,9 @@ static QString toString(JSStringRef stringRef) static JSValueRef unwrapBoxedPrimitive(JSContextRef context, JSValueRef value, JSObjectRef obj) { - JSObject* object = toJS(obj); ExecState* exec = toJS(context); + APIEntryShim entryShim(exec); + JSObject* object = toJS(obj); if (object->inherits(&NumberObject::s_info)) return toRef(exec, jsNumber(object->toNumber(exec))); if (object->inherits(&StringObject::s_info)) @@ -281,6 +283,7 @@ static QString toQString(JSContextRef context, JSValueRef value) static void getGregorianDateTimeUTC(JSContextRef context, JSRealType type, JSValueRef value, JSObjectRef object, JSValueRef* exception, GregorianDateTime* gdt) { ExecState* exec = toJS(context); + APIEntryShim entryShim(exec); if (type == Date) { JSObject* jsObject = toJS(object); DateInstance* date = asDateInstance(jsObject); @@ -729,6 +732,7 @@ JSValueRef convertQVariantToValue(JSContextRef context, PassRefPtr<RootObject> r WTF::RefPtr<WTF::Uint8ClampedArray> wtfByteArray = WTF::Uint8ClampedArray::createUninitialized(qtByteArray.length()); memcpy(wtfByteArray->data(), qtByteArray.constData(), qtByteArray.length()); ExecState* exec = toJS(context); + APIEntryShim entryShim(exec); return toRef(exec, toJS(exec, static_cast<JSDOMGlobalObject*>(exec->lexicalGlobalObject()), wtfByteArray.get())); } @@ -737,6 +741,7 @@ JSValueRef convertQVariantToValue(JSContextRef context, PassRefPtr<RootObject> r if (!obj) return JSValueMakeNull(context); ExecState* exec = toJS(context); + APIEntryShim entryShim(exec); return toRef(exec, QtInstance::getQtInstance(obj, root, QtInstance::QtOwnership)->createRuntimeObject(exec)); } @@ -751,6 +756,7 @@ JSValueRef convertQVariantToValue(JSContextRef context, PassRefPtr<RootObject> r if (!document) return JSValueMakeUndefined(context); ExecState* exec = toJS(context); + APIEntryShim entryShim(exec); return toRef(exec, customRuntimeConversions()->value(type).toJSValueFunc(exec, toJSDOMGlobalObject(document, exec), variant)); } @@ -800,6 +806,7 @@ JSValueRef convertQVariantToValue(JSContextRef context, PassRefPtr<RootObject> r QObjectList ol = variant.value<QObjectList>(); JSObjectRef array = JSObjectMakeArray(context, 0, 0, exception); ExecState* exec = toJS(context); + APIEntryShim entryShim(exec); for (int i = 0; i < ol.count(); ++i) { JSValueRef jsObject = toRef(exec, QtInstance::getQtInstance(ol.at(i), root, QtInstance::QtOwnership)->createRuntimeObject(exec)); JSObjectSetPropertyAtIndex(context, array, i, jsObject, /*ignored exception*/0); |
