// Copyright 2018 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. // Tests that creating an iterator that shrinks the array populated by // Array.from does not lead to out of bounds writes. let oobArray = []; let maxSize = 1028 * 8; Array.from.call(function() { return oobArray }, {[Symbol.iterator] : _ => ( { counter : 0, next() { let result = this.counter++; if (this.counter > maxSize) { oobArray.length = 0; return {done: true}; } else { return {value: result, done: false}; } } } ) }); assertEquals(oobArray.length, maxSize); // iterator reset the length to 0 just before returning done, so this will crash // if the backing store was not resized correctly. oobArray[oobArray.length - 1] = 0x41414141;