diff options
author | Aaron Kennedy <aaron.kennedy@nokia.com> | 2010-01-15 04:12:20 (GMT) |
---|---|---|
committer | Aaron Kennedy <aaron.kennedy@nokia.com> | 2010-01-15 04:12:20 (GMT) |
commit | bd3caa48edf2cd53e561cec7ee7ccec6748a4843 (patch) | |
tree | 8dc29129364253ec53143b3cc22e3412839dd800 | |
parent | 3b0a9dbfa3683bfb6bdc484ed225267ca56bfa9b (diff) | |
download | Qt-bd3caa48edf2cd53e561cec7ee7ccec6748a4843.zip Qt-bd3caa48edf2cd53e561cec7ee7ccec6748a4843.tar.gz Qt-bd3caa48edf2cd53e561cec7ee7ccec6748a4843.tar.bz2 |
Fix possible crash
The QScriptValue does not always have a valid QScriptEngine.
-rw-r--r-- | src/script/bridge/qscriptdeclarativeclass.cpp | 10 | ||||
-rw-r--r-- | src/script/bridge/qscriptdeclarativeclass_p.h | 3 |
2 files changed, 9 insertions, 4 deletions
diff --git a/src/script/bridge/qscriptdeclarativeclass.cpp b/src/script/bridge/qscriptdeclarativeclass.cpp index 0df9a49..ce2fc23 100644 --- a/src/script/bridge/qscriptdeclarativeclass.cpp +++ b/src/script/bridge/qscriptdeclarativeclass.cpp @@ -90,6 +90,11 @@ QScriptDeclarativeClass::Value::Value(QScriptContext *ctxt, const QString &value new (this) JSC::JSValue(JSC::jsString(QScriptEnginePrivate::frameForContext(ctxt), value)); } +QScriptDeclarativeClass::Value::Value(QScriptContext *ctxt, const QScriptValue &value) +{ + new (this) JSC::JSValue(QScriptEnginePrivate::get(ctxt->engine())->scriptValueToJSCValue(value)); +} + QScriptDeclarativeClass::Value::Value(QScriptEngine *eng, int value) { new (this) JSC::JSValue(QScriptEnginePrivate::get(eng)->currentFrame, value); @@ -120,12 +125,11 @@ QScriptDeclarativeClass::Value::Value(QScriptEngine *eng, const QString &value) new (this) JSC::JSValue(JSC::jsString(QScriptEnginePrivate::get(eng)->currentFrame, value)); } -QScriptDeclarativeClass::Value::Value(const QScriptValue &value) +QScriptDeclarativeClass::Value::Value(QScriptEngine *eng, const QScriptValue &value) { - new (this) JSC::JSValue(QScriptValuePrivate::get(&value)->engine->scriptValueToJSCValue(value)); + new (this) JSC::JSValue(QScriptEnginePrivate::get(eng)->scriptValueToJSCValue(value)); } - QScriptDeclarativeClass::Value::~Value() { ((JSC::JSValue *)(this))->~JSValue(); diff --git a/src/script/bridge/qscriptdeclarativeclass_p.h b/src/script/bridge/qscriptdeclarativeclass_p.h index 6050971..357d1d5 100644 --- a/src/script/bridge/qscriptdeclarativeclass_p.h +++ b/src/script/bridge/qscriptdeclarativeclass_p.h @@ -52,7 +52,6 @@ public: public: Value(); Value(const Value &); - Value(const QScriptValue &); Value(QScriptContext *, int); Value(QScriptContext *, uint); @@ -60,12 +59,14 @@ public: Value(QScriptContext *, double); Value(QScriptContext *, float); Value(QScriptContext *, const QString &); + Value(QScriptContext *, const QScriptValue &); Value(QScriptEngine *, int); Value(QScriptEngine *, uint); Value(QScriptEngine *, bool); Value(QScriptEngine *, double); Value(QScriptEngine *, float); Value(QScriptEngine *, const QString &); + Value(QScriptEngine *, const QScriptValue &); ~Value(); QScriptValue toScriptValue(QScriptEngine *) const; |