Pārlūkot izejas kodu

Do not allow nil values to leak into FunctionCall.Arguments array. Fixes #20, closes #21.

Dmitry Panov 8 gadi atpakaļ
vecāks
revīzija
f066572b01
2 mainītis faili ar 15 papildinājumiem un 1 dzēšanām
  1. 5 1
      builtin_function.go
  2. 10 0
      runtime_test.go

+ 5 - 1
builtin_function.go

@@ -45,7 +45,11 @@ func (r *Runtime) toValueArray(a Value) []Value {
 	l := toUInt32(obj.self.getStr("length"))
 	ret := make([]Value, l)
 	for i := uint32(0); i < l; i++ {
-		ret[i] = obj.self.get(valueInt(i))
+		o := obj.self.get(valueInt(i))
+		if o == nil {
+			o = _undefined
+		}
+		ret[i] = o
 	}
 	return ret
 }

+ 10 - 0
runtime_test.go

@@ -725,6 +725,16 @@ func TestSortComparatorReturnValues(t *testing.T) {
 	testScript1(SCRIPT, _undefined, t)
 }
 
+func TestNilApplyArg(t *testing.T) {
+	const SCRIPT = `
+	(function x(a, b) {
+		return a === undefined && b === 1;
+        }).apply(this, [,1])
+	`
+
+	testScript1(SCRIPT, valueTrue, t)
+}
+
 /*
 func TestArrayConcatSparse(t *testing.T) {
 function foo(a,b,c)