Don't crash when creating backtrace for built-in JS function (2nd try)
authorKent Hansen <kent.hansen@nokia.com>
Mon, 7 Feb 2011 13:53:59 +0000 (14:53 +0100)
committerJason McDonald <jason.mcdonald@nokia.com>
Wed, 9 Feb 2011 07:16:26 +0000 (17:16 +1000)
commitb79472dcbd1b5c9192acb5181c695fa6044cae6c
tree599f859524bbc76cfcf06c392f11791c3288b088
parent713f07486de353f30fb63d2e2e3b17202a5d4a1b
Don't crash when creating backtrace for built-in JS function (2nd try)

Commit 147df10403ba280b3f04c1e3d6c4b1cf386abe5d did not quite
fix the issue; other places need the same checks.

When the JIT is enabled, frames for built-in JS host calls
(such as Array.prototype.forEach) are not fully initialized.
In particular, the CodeBlock register of such frames is not
set (see comment in JITCall.cpp).

We need to check if the codeBlock is actually valid before we
start using it.

This fixes the crash(es) but not the problem of actually getting
the arguments for such frames through the API. There's also a
related problem when a QtScript function (newFunction()) is called
as a callback of a built-in JS host function (QTBUG-17287).
These problems will go away once JavaScriptCore is updated to a
more recent version (4.8 at the earliest), since the
native-vs-script frame handling has been unified.

Task-number: QTBUG-17137
Reviewed-by: Olivier Goffart
(cherry picked from commit 640436345645b6cf6ff3334399f33c9d1c089492)
src/script/api/qscriptcontext.cpp
src/script/api/qscriptcontextinfo.cpp
src/script/api/qscriptengine.cpp
src/script/api/qscriptengine_p.h
tests/auto/qscriptcontext/tst_qscriptcontext.cpp
tests/auto/qscriptengine/tst_qscriptengine.cpp