mirror of https://github.com/lukechilds/node.git
Browse Source
Original commit message: [runtime] Fix Array.prototype.concat with complex @@species Array.prototype.concat does not properly handle JSProxy species that will modify the currently visited array. BUG=682194 Review-Url: https://codereview.chromium.org/2655623004 Cr-Commit-Position: refs/heads/master@{#42640} Refs: https://github.com/nodejs/node/pull/12779 PR-URL: https://github.com/nodejs/node/pull/16133 Reviewed-By: Anna Henningsen <anna@addaleax.net> Reviewed-By: Stephen Belanger <admin@stephenbelanger.com> Reviewed-By: Franziska Hinkelmann <franziska.hinkelmann@gmail.com> Reviewed-By: James M Snell <jasnell@gmail.com> Reviewed-By: Colin Ihrig <cjihrig@gmail.com>v6.x-staging
Ali Ijaz Sheikh
7 years ago
committed by
Myles Borins
2 changed files with 53 additions and 9 deletions
@ -0,0 +1,35 @@ |
|||
// Copyright 2017 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-gc
|
|||
|
|||
var proxy = new Proxy([], { |
|||
defineProperty() { |
|||
w.length = 1; // shorten the array so the backstore pointer is relocated
|
|||
gc(); // force gc to move the array's elements backstore
|
|||
return Object.defineProperty.apply(this, arguments); |
|||
} |
|||
}); |
|||
|
|||
class MyArray extends Array { |
|||
// custom constructor which returns a proxy object
|
|||
static get[Symbol.species](){ |
|||
return function() { |
|||
return proxy; |
|||
} |
|||
}; |
|||
} |
|||
|
|||
var w = new MyArray(100); |
|||
w[1] = 0.1; |
|||
w[2] = 0.1; |
|||
|
|||
var result = Array.prototype.concat.call(w); |
|||
|
|||
assertEquals(undefined, result[0]); |
|||
assertEquals(0.1, result[1]); |
|||
|
|||
for (var i = 2; i < 200; i++) { |
|||
assertEquals(undefined, result[i]); |
|||
} |
Loading…
Reference in new issue