Assertion failure: stepperCount == trappingScript->stepModeCount(), at js/src/vm/Debugger.cpp:2382
Categories
(Core :: JavaScript Engine, defect, P2)
Tracking
()
Tracking | Status | |
---|---|---|
firefox-esr60 | --- | unaffected |
firefox64 | --- | unaffected |
firefox65 | --- | wontfix |
firefox66 | --- | wontfix |
firefox67 | --- | wontfix |
firefox68 | --- | fixed |
People
(Reporter: gkw, Assigned: jorendorff)
References
Details
(4 keywords, Whiteboard: [jsbugmon:testComment=13,origRev=8ec327de0ba7])
Attachments
(4 files)
Reporter | ||
Comment 1•6 years ago
|
||
Reporter | ||
Comment 2•6 years ago
|
||
Comment 5•6 years ago
|
||
Assignee | ||
Comment 6•6 years ago
|
||
Assignee | ||
Comment 7•6 years ago
|
||
Assignee | ||
Updated•6 years ago
|
Assignee | ||
Updated•6 years ago
|
Comment 9•6 years ago
|
||
Assignee | ||
Updated•6 years ago
|
Comment 10•6 years ago
|
||
Updated•6 years ago
|
Assignee | ||
Comment 11•6 years ago
|
||
Updated•6 years ago
|
Comment hidden (obsolete) |
Reporter | ||
Comment 13•6 years ago
|
||
// jsfunfuzz-generated
function f() {
return (async function(y) {
await /x/;
await y;
})
};
f()();
f()();
// Adapted from randomly chosen test: js/src/jit-test/tests/debug/bug1130756.js
g = newGlobal();
g.parent = this;
g.eval("(" + function() {
dbg = Debugger(parent);
dbg.onEnterFrame = function(frame) {
frame.onStep = function() {}
}
} + ")")();
asserts js shell compiled with --enable-debug on m-c rev 8ec327de0ba7 using --fuzzing-safe --no-threads --no-baseline --no-ion --more-compartments at Assertion failure: stepperCount == trappingScript->stepModeCount(), at js/src/vm/Debugger.cpp:2254
Updated•6 years ago
|
Updated•6 years ago
|
Comment 14•6 years ago
|
||
Updated•6 years ago
|
Updated•6 years ago
|
Comment 16•6 years ago
|
||
Slightly simplified test case, reproduces for me on 258af4e91151 (2019-4-16):
var g = newGlobal({ newCompartment: true });
g.eval(`
async function f(y) {
await true;
await true;
};
`);
g.f();
g.f();
var dbg = Debugger(g);
dbg.onEnterFrame = function(frame) {
frame.onStep = function() {}
}
Comment 17•6 years ago
|
||
Comment 18•6 years ago
|
||
An AbstractGeneratorObject's RESUME_INDEX_SLOT indicates the state of the
generator object: it may be undefined
(before initial yield), null
(closed),
or an integer (running, closing, or suspended).
AbstractGeneratorObject has a number of predicate methods to test for these
various states. Unfortunately, some of the predicates grab RESUME_INDEX_SLOT and
immediately call toInt32
on its value, which crashes if it is not an Int32.
This means the only safe way to ask if an AbstractGeneratorObject is suspended
is:
!isBeforeInitialYield() && !isClosed() && isSuspended()
If either of the first two conditions is true, isSuspended will assert. This is
verbose, and means the predicates cannot be used without studying the details of
the RESUME_INDEX_SLOT's representation.
This patch makes the predicates assertion-free. isSuspended acquires a new
branch, but the others should be just as efficient as they were before.
Updated•6 years ago
|
Comment 19•6 years ago
|
||
Comment 20•6 years ago
|
||
bugherder |
Comment 21•6 years ago
|
||
P2 and we shipped 65 and 66 with this bug, I think it can ride the trains given that RC week is upon us.
Updated•6 years ago
|
Comment 22•6 years ago
|
||
Comment 23•6 years ago
|
||
bugherder |
Assignee | ||
Updated•6 years ago
|
Description
•