mirror of https://github.com/tc39/test262.git
Built-in functions should not have non-deletable, non-poisoned
"caller" and "arguments" properties.
This commit is contained in:
parent
68e437e708
commit
debc8d8b67
|
@ -0,0 +1,46 @@
|
||||||
|
// Copyright 2011 Google Inc. All rights reserved.
|
||||||
|
// This code is governed by the BSD license found in the LICENSE file.
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @path bestPractice/Sbp_A10_T1.js
|
||||||
|
* @description Built-in functions should not have a non-deletable,
|
||||||
|
* non-poisoned "caller" property.
|
||||||
|
* @bestPractice
|
||||||
|
* http://wiki.ecmascript.org/doku.php?id=conventions:make_non-standard_properties_configurable
|
||||||
|
*/
|
||||||
|
|
||||||
|
(function() {
|
||||||
|
var map = Array.prototype.map;
|
||||||
|
if (!map) { return; }
|
||||||
|
try {
|
||||||
|
delete map.caller;
|
||||||
|
} catch (err1) {
|
||||||
|
// ignore
|
||||||
|
}
|
||||||
|
if ('caller' in map) {
|
||||||
|
try {
|
||||||
|
Object.defineProperty(map, 'caller', {
|
||||||
|
writable: false,
|
||||||
|
configurable: false
|
||||||
|
});
|
||||||
|
} catch (err2) {
|
||||||
|
// ignore
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
function foo(m) { return m.caller; }
|
||||||
|
function testfn(a, f) { return a.map(f)[0]; }
|
||||||
|
var a = [map];
|
||||||
|
var caller;
|
||||||
|
try {
|
||||||
|
caller = testfn(a, foo);
|
||||||
|
} catch (err3) {
|
||||||
|
if (err3 instanceof TypeError) { return; }
|
||||||
|
$ERROR('#1: Built-in "caller" failed with: ' + err3);
|
||||||
|
}
|
||||||
|
if (null === caller || void 0 === caller) { return; }
|
||||||
|
if (testfn === caller) {
|
||||||
|
$ERROR('#2: Built-in revealed caller');
|
||||||
|
}
|
||||||
|
$ERROR('#3: Unexpected "caller": ' + caller);
|
||||||
|
})();
|
|
@ -0,0 +1,46 @@
|
||||||
|
// Copyright 2011 Google Inc. All rights reserved.
|
||||||
|
// This code is governed by the BSD license found in the LICENSE file.
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @path bestPractice/Sbp_A10_T2.js
|
||||||
|
* @description Built-in functions should not have a non-deletable,
|
||||||
|
* non-poisoned "arguments" property.
|
||||||
|
* @bestPractice
|
||||||
|
* http://wiki.ecmascript.org/doku.php?id=conventions:make_non-standard_properties_configurable
|
||||||
|
*/
|
||||||
|
|
||||||
|
(function() {
|
||||||
|
var map = Array.prototype.map;
|
||||||
|
if (!map) { return; }
|
||||||
|
try {
|
||||||
|
delete map.arguments;
|
||||||
|
} catch (err1) {
|
||||||
|
// ignore
|
||||||
|
}
|
||||||
|
if ('arguments' in map) {
|
||||||
|
try {
|
||||||
|
Object.defineProperty(map, 'arguments', {
|
||||||
|
writable: false,
|
||||||
|
configurable: false
|
||||||
|
});
|
||||||
|
} catch (err2) {
|
||||||
|
// ignore
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
function foo(m) { return m.arguments; }
|
||||||
|
function testfn(a, f) { return a.map(f)[0]; }
|
||||||
|
var a = [map];
|
||||||
|
var args;
|
||||||
|
try {
|
||||||
|
args = testfn(a, foo);
|
||||||
|
} catch (err3) {
|
||||||
|
if (err3 instanceof TypeError) { return; }
|
||||||
|
$ERROR('#1: Built-in "arguments" failed with: ' + err3);
|
||||||
|
}
|
||||||
|
if (null === args || void 0 === args) { return; }
|
||||||
|
if (testfn === args) {
|
||||||
|
$ERROR('#2: Built-in revealed arguments');
|
||||||
|
}
|
||||||
|
$ERROR('#3: Unexpected "arguments": ' + args);
|
||||||
|
})();
|
Loading…
Reference in New Issue