Do not access out of bounds arguments (#6792)
Potentially out of bounds arguments should not just be directly accessed, instead use a ternary operator to check length.
This commit is contained in:
parent
e67cfc5b31
commit
2b710d0387
@ -5,6 +5,6 @@ var some = function () {
|
||||
|
||||
var collect = function () {
|
||||
let since = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 0;
|
||||
let userid = arguments[1];
|
||||
let userid = arguments.length > 1 ? arguments[1] : undefined;
|
||||
console.log(userid);
|
||||
};
|
||||
|
||||
@ -19,8 +19,8 @@ const buildLooseDestructuredDefaultParam = template(`
|
||||
let ASSIGNMENT_IDENTIFIER = PARAMETER_NAME === UNDEFINED ? DEFAULT_VALUE : PARAMETER_NAME ;
|
||||
`);
|
||||
|
||||
const buildArgumentsAccess = template(`
|
||||
let $0 = arguments[$1];
|
||||
const buildSafeArgumentsAccess = template(`
|
||||
let $0 = arguments.length > $1 ? arguments[$1] : undefined;
|
||||
`);
|
||||
|
||||
function isSafeBinding(scope, node) {
|
||||
@ -110,7 +110,10 @@ export default function convertFunctionParams(path, loose) {
|
||||
});
|
||||
body.push(defNode);
|
||||
} else if (firstOptionalIndex !== null) {
|
||||
const defNode = buildArgumentsAccess([param.node, t.numericLiteral(i)]);
|
||||
const defNode = buildSafeArgumentsAccess([
|
||||
param.node,
|
||||
t.numericLiteral(i),
|
||||
]);
|
||||
body.push(defNode);
|
||||
} else if (param.isObjectPattern() || param.isArrayPattern()) {
|
||||
const uid = path.scope.generateUidIdentifier("ref");
|
||||
|
||||
@ -1,4 +1,4 @@
|
||||
function foo() {
|
||||
var a = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : "foo";
|
||||
var b = arguments[1];
|
||||
var b = arguments.length > 1 ? arguments[1] : undefined;
|
||||
}
|
||||
|
||||
@ -1,11 +1,13 @@
|
||||
function fn(a1) {
|
||||
var a2 = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 4;
|
||||
var _arguments$ = arguments[2],
|
||||
a3 = _arguments$.a3,
|
||||
a4 = _arguments$.a4;
|
||||
var a5 = arguments[3];
|
||||
|
||||
var _ref = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : {},
|
||||
a6 = _ref.a6,
|
||||
a7 = _ref.a7;
|
||||
}
|
||||
var _ref = arguments.length > 2 ? arguments[2] : undefined,
|
||||
a3 = _ref.a3,
|
||||
a4 = _ref.a4;
|
||||
|
||||
var a5 = arguments.length > 3 ? arguments[3] : undefined;
|
||||
|
||||
var _ref2 = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : {},
|
||||
a6 = _ref2.a6,
|
||||
a7 = _ref2.a7;
|
||||
}
|
||||
|
||||
@ -1,9 +1,10 @@
|
||||
// #3861
|
||||
function t() {
|
||||
var x = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : "default";
|
||||
var _arguments$ = arguments[1],
|
||||
a = _arguments$.a,
|
||||
b = _arguments$.b;
|
||||
|
||||
var _ref = arguments.length > 1 ? arguments[1] : undefined,
|
||||
a = _ref.a,
|
||||
b = _ref.b;
|
||||
|
||||
for (var _len = arguments.length, args = new Array(_len > 2 ? _len - 2 : 0), _key = 2; _key < _len; _key++) {
|
||||
args[_key - 2] = arguments[_key];
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user