4b6ee11532
This fixes a long-standing TODO to disallow importing receivers that have "toString" or "valueOf" patched. Calling those methods could have observable side effects, so allowing that would require bigger refactorings to ensure that we only call each such function exactly once per import, and in the right order. Since this use case is rare, we just forbid importing such receivers. R=jkummerow@chromium.org Bug: chromium:1248677 Change-Id: I99bbd7db950ec3c7ac9cc1f59e8c476688e7d7b6 Reviewed-on: https://chromium-review.googlesource.com/c/v8/v8/+/3190475 Reviewed-by: Jakob Kummerow <jkummerow@chromium.org> Commit-Queue: Clemens Backes <clemensb@chromium.org> Cr-Commit-Position: refs/heads/main@{#77149}
25 lines
633 B
JavaScript
25 lines
633 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.
|
|
|
|
function setup_proxy() {
|
|
// Mess with the prototype to get funky conversion behavior.
|
|
Function.prototype.__proto__ = new Proxy(setup_proxy, {
|
|
get: async (target, key) => {
|
|
console.log(key);
|
|
}
|
|
});
|
|
}
|
|
|
|
setup_proxy();
|
|
|
|
function asm(global, imports) {
|
|
'use asm';
|
|
// Trigger proxy trap when looking up #toPrimitive:
|
|
var bar = +imports.bar;
|
|
function f() {}
|
|
return {f: f};
|
|
}
|
|
|
|
assertThrows(() => asm(undefined, {bar: setup_proxy}), TypeError);
|