Pārlūkot izejas kodu

Correctly handle null or undefined second argument to Function.prototype.apply(). Fixes #655

Dmitry Panov 8 mēneši atpakaļ
vecāks
revīzija
5ef83b82af
2 mainītis faili ar 11 papildinājumiem un 2 dzēšanām
  1. 4 2
      builtin_function.go
  2. 7 0
      builtin_function_test.go

+ 4 - 2
builtin_function.go

@@ -90,8 +90,10 @@ func (r *Runtime) createListFromArrayLike(a Value) []Value {
 
 func (r *Runtime) functionproto_apply(call FunctionCall) Value {
 	var args []Value
-	if len(call.Arguments) >= 2 {
-		args = r.createListFromArrayLike(call.Arguments[1])
+
+	argArray := call.Argument(1)
+	if !IsUndefined(argArray) && !IsNull(argArray) {
+		args = r.createListFromArrayLike(argArray)
 	}
 
 	f := r.toCallable(call.This)

+ 7 - 0
builtin_function_test.go

@@ -12,3 +12,10 @@ func TestHashbangInFunctionConstructor(t *testing.T) {
 	`
 	testScriptWithTestLib(SCRIPT, _undefined, t)
 }
+
+func TestFunctionApplyNullArgArray(t *testing.T) {
+	const SCRIPT = `
+	assert.sameValue(0, (function() {return arguments.length}).apply(undefined, null))
+	`
+	testScriptWithTestLib(SCRIPT, _undefined, t)
+}