95f72de8ca
It turns out that KeyAccumulator::GetKeys will fail if the object it is operating on is a Proxy with an ownKeys() or getOwnPropertyDescriptor() trap that throws. Handle this case in Isolate::GetImportAssertionsFromArgument by bailing out early. Bug: v8:11730 Change-Id: I363bf2d218f6ba7eeb2001cd644f5529901fdb3e Reviewed-on: https://chromium-review.googlesource.com/c/v8/v8/+/2875541 Reviewed-by: Adam Klein <adamk@chromium.org> Reviewed-by: Marja Hölttä <marja@chromium.org> Commit-Queue: Dan Clark <daniec@microsoft.com> Cr-Commit-Position: refs/heads/master@{#74417}
26 lines
964 B
JavaScript
26 lines
964 B
JavaScript
// Copyright 2021 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: --allow-natives-syntax --harmony-import-assertions
|
|
|
|
let result1;
|
|
let result2;
|
|
|
|
let badAssertProxy1 = new Proxy({}, { ownKeys() { throw "bad ownKeys!"; } });
|
|
import('./modules-skip-1.mjs', { assert: badAssertProxy1 }).then(
|
|
() => assertUnreachable('Should have failed due to throwing ownKeys'),
|
|
error => result1 = error);
|
|
|
|
let badAssertProxy2 = new Proxy(
|
|
{foo: "bar"},
|
|
{ getOwnPropertyDescriptor() { throw "bad getOwnPropertyDescriptor!"; } });
|
|
import('./modules-skip-1.mjs', { assert: badAssertProxy2 }).then(
|
|
() => assertUnreachable(
|
|
'Should have failed due to throwing getOwnPropertyDescriptor'),
|
|
error => result2 = error);
|
|
|
|
%PerformMicrotaskCheckpoint();
|
|
|
|
assertEquals('bad ownKeys!', result1);
|
|
assertEquals('bad getOwnPropertyDescriptor!', result2); |