risor-io / risor

Fast and flexible scripting for Go developers and DevOps.
https://risor.io
Apache License 2.0
576 stars 24 forks source link

compiler panics while accessing undefined variable #236

Closed runsisi closed 2 months ago

runsisi commented 2 months ago
func main() {
    code := `
    for _, v := range [1, 2, 3] {
        func() {
            print(undefined_var)
        }()
    }
    `

    _, err := risor.Eval(context.Background(), code)
    if err != nil {
        fmt.Println(err)
    }
}

while compiling code above panic occurs:

panic: runtime error: slice bounds out of range [:-1]

goroutine 1 [running]:
github.com/risor-io/risor/compiler.(*Compiler).endLoop(...)
        /home/runsisi/working/go/risor/compiler/compiler.go:309
github.com/risor-io/risor/compiler.(*Compiler).compileForRange.func1()
        /home/runsisi/working/go/risor/compiler/compiler.go:1283 +0x6b
github.com/risor-io/risor/compiler.(*Compiler).compileForRange(0xc00019f080, 0xc0000c9040, {0xc0000a2260, 0x2, 0x4136fb?}, {0x9ae0b0?, 0xc0000da2c0?})
        /home/runsisi/working/go/risor/compiler/compiler.go:1304 +0x502
github.com/risor-io/risor/compiler.(*Compiler).compileFor(0xc00019f080, 0xc0000c9040)
        /home/runsisi/working/go/risor/compiler/compiler.go:1410 +0xad4
github.com/risor-io/risor/compiler.(*Compiler).compile(0x92439b98bdc26702?, {0x9adfd0?, 0xc0000c9040?})
        /home/runsisi/working/go/risor/compiler/compiler.go:181 +0x4c5

endLoop may need some bound checking ^1.