From 216d3a939b2da146efc3a0800c375b44bee7d842 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Micha=C3=ABl=20Zasso?= Date: Wed, 6 Sep 2017 09:59:44 +0200 Subject: [PATCH 1/2] deps: backport 071b655 from V8 upstream Original commit message: [PATCH] [debugger] Scope iterator should not visit inner function literals. R=marja@chromium.org BUG=chromium:621361 Review-Url: https://codereview.chromium.org/2185913003 Cr-Commit-Position: refs/heads/master@{#38087} Fixes: https://github.com/nodejs/node/issues/15075 --- deps/v8/src/debug/debug-scopes.cc | 6 +++ .../mjsunit/regress/regress-crbug-621361.js | 40 +++++++++++++++++++ 2 files changed, 46 insertions(+) create mode 100644 deps/v8/test/mjsunit/regress/regress-crbug-621361.js diff --git a/deps/v8/src/debug/debug-scopes.cc b/deps/v8/src/debug/debug-scopes.cc index d9c615b01b4c58..88024021143ffe 100644 --- a/deps/v8/src/debug/debug-scopes.cc +++ b/deps/v8/src/debug/debug-scopes.cc @@ -842,6 +842,12 @@ bool ScopeIterator::CopyContextExtensionToScopeObject( void ScopeIterator::GetNestedScopeChain(Isolate* isolate, Scope* scope, int position) { + if (scope->is_function_scope()) { + // Do not collect scopes of nested inner functions inside the current one. + Handle function = + Handle::cast(frame_inspector_->GetFunction()); + if (scope->end_position() < function->shared()->end_position()) return; + } if (!scope->is_eval_scope()) { nested_scope_chain_.Add(ExtendedScopeInfo(scope->GetScopeInfo(isolate), scope->start_position(), diff --git a/deps/v8/test/mjsunit/regress/regress-crbug-621361.js b/deps/v8/test/mjsunit/regress/regress-crbug-621361.js new file mode 100644 index 00000000000000..f9496ae87d9f8b --- /dev/null +++ b/deps/v8/test/mjsunit/regress/regress-crbug-621361.js @@ -0,0 +1,40 @@ +// Copyright 2016 the V8 project authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +// Flags: --expose-debug-as debug + +var Debug = debug.Debug; +var steps = 0; +var exception = null; + +function listener(event, execState, eventData, data) { + if (event != Debug.DebugEvent.Break) return; + try { + assertEquals([ debug.ScopeType.Local, + debug.ScopeType.Script, + debug.ScopeType.Global], + execState.frame().allScopes().map(s => s.scopeType())); + var x_value = execState.frame().evaluate("x").value(); + if (steps < 2) { + assertEquals(undefined, x_value); + execState.prepareStep(Debug.StepAction.StepIn); + } else { + assertEquals("l => l", x_value.toString()); + } + steps++; + } catch (e) { + exception = e; + } +} + +Debug.setListener(listener); + +(function() { + debugger; + var x = l => l; +})(); + +Debug.setListener(null); +assertNull(exception); +assertEquals(3, steps); From 169f0a5048692090ba1f40e292fceb812fe11153 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Micha=C3=ABl=20Zasso?= Date: Sun, 10 Sep 2017 13:44:38 +0200 Subject: [PATCH 2/2] update V8 patch level --- deps/v8/include/v8-version.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/deps/v8/include/v8-version.h b/deps/v8/include/v8-version.h index 955fcd5646cef5..e7931da11e423f 100644 --- a/deps/v8/include/v8-version.h +++ b/deps/v8/include/v8-version.h @@ -11,7 +11,7 @@ #define V8_MAJOR_VERSION 5 #define V8_MINOR_VERSION 1 #define V8_BUILD_NUMBER 281 -#define V8_PATCH_LEVEL 107 +#define V8_PATCH_LEVEL 108 // Use 1 for candidates and 0 otherwise. // (Boolean macro values are not supported by all preprocessors.)