Chromium Code Reviews| Index: src/isolate.cc |
| diff --git a/src/isolate.cc b/src/isolate.cc |
| index 72df9b4b2b131794190e025049fe65f4e8e51362..8930e7b1c876bde0ddc1e6847061a3e843637f4a 100644 |
| --- a/src/isolate.cc |
| +++ b/src/isolate.cc |
| @@ -395,13 +395,15 @@ Handle<JSArray> Isolate::CaptureSimpleStackTrace(Handle<JSObject> error_object, |
| iter.Advance()) { |
| StackFrame* raw_frame = iter.frame(); |
| if (IsVisibleInStackTrace(raw_frame, *caller, &seen_caller)) { |
| - frames_seen++; |
| JavaScriptFrame* frame = JavaScriptFrame::cast(raw_frame); |
| // Set initial size to the maximum inlining level + 1 for the outermost |
| // function. |
| List<FrameSummary> frames(FLAG_max_inlining_levels + 1); |
| frame->Summarize(&frames); |
| for (int i = frames.length() - 1; i >= 0; i--) { |
| + Handle<JSFunction> fun = frames[i].function(); |
| + // Filter out frames from other security contexts. |
| + if (!this->context()->HasSameSecurityTokenAs(fun->context())) continue; |
| if (cursor + 4 > elements->length()) { |
| int new_capacity = JSObject::NewElementsCapacity(elements->length()); |
| Handle<FixedArray> new_elements = |
| @@ -414,7 +416,6 @@ Handle<JSArray> Isolate::CaptureSimpleStackTrace(Handle<JSObject> error_object, |
| ASSERT(cursor + 4 <= elements->length()); |
| Handle<Object> recv = frames[i].receiver(); |
| - Handle<JSFunction> fun = frames[i].function(); |
| Handle<Code> code = frames[i].code(); |
| Handle<Smi> offset(Smi::FromInt(frames[i].offset()), this); |
| // The stack trace API should not expose receivers and function |
| @@ -433,6 +434,7 @@ Handle<JSArray> Isolate::CaptureSimpleStackTrace(Handle<JSObject> error_object, |
| elements->set(cursor++, *code); |
| elements->set(cursor++, *offset); |
| } |
| + frames_seen++; |
| } |
| } |
| elements->set(0, Smi::FromInt(sloppy_frames)); |
| @@ -487,10 +489,13 @@ Handle<JSArray> Isolate::CaptureCurrentStackTrace( |
| List<FrameSummary> frames(FLAG_max_inlining_levels + 1); |
| frame->Summarize(&frames); |
| for (int i = frames.length() - 1; i >= 0 && frames_seen < limit; i--) { |
| + Handle<JSFunction> fun = frames[i].function(); |
| + // Filter frames from other security contexts. |
| + if (!this->context()->HasSameSecurityTokenAs(fun->context())) continue; |
|
yurys
2014/05/19 08:30:04
This change breaks DevTools debugger as e.g. when
dcarney
2014/05/19 09:33:16
got it. luckily, scriptdebugserver is written in
|
| + |
| // Create a JSObject to hold the information for the StackFrame. |
| Handle<JSObject> stack_frame = factory()->NewJSObject(object_function()); |
| - Handle<JSFunction> fun = frames[i].function(); |
| Handle<Script> script(Script::cast(fun->shared()->script())); |
| if (options & StackTrace::kLineNumber) { |