Skip to content

Commit 89d3491

Browse files
committed
Reject fractional array.fetch indices
1 parent f97e06e commit 89d3491

2 files changed

Lines changed: 12 additions & 1 deletion

File tree

vibes/execution_members_array_query.go

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,9 @@
11
package vibes
22

3-
import "fmt"
3+
import (
4+
"fmt"
5+
"math"
6+
)
47

58
func arrayMemberQuery(property string) (Value, error) {
69
switch property {
@@ -220,6 +223,9 @@ func arrayMemberQuery(property string) (Value, error) {
220223
if err != nil {
221224
return NewNil(), fmt.Errorf("array.fetch index must be integer")
222225
}
226+
if args[0].Kind() == KindFloat && math.Trunc(args[0].Float()) != args[0].Float() {
227+
return NewNil(), fmt.Errorf("array.fetch index must be integer")
228+
}
223229
arr := receiver.Array()
224230
if index >= 0 && index < len(arr) {
225231
return arr[index], nil

vibes/runtime_test.go

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3659,6 +3659,11 @@ func TestMethodErrorHandling(t *testing.T) {
36593659
script: `def run [1, 2, 3].fetch("1") end`,
36603660
errMsg: "index must be integer",
36613661
},
3662+
{
3663+
name: "array.fetch with fractional float index",
3664+
script: `def run [1, 2, 3].fetch(1.5) end`,
3665+
errMsg: "index must be integer",
3666+
},
36623667
{
36633668
name: "array.count with argument and block",
36643669
script: `def run()

0 commit comments

Comments
 (0)