Skip to content

Panic during argumentless call to waitForURL #5023

@ankur22

Description

@ankur22

Brief summary

Brief summary

Let's say we call this API:

    await Promise.all([
      page.waitForURL(),
      page.locator('a[href="/my_messages.php"]').click()
    ]);

This currently panics and causes a nasty call stack:

panic: runtime error: invalid memory address or nil pointer dereference [recovered]
running panic: runtime error: invalid memory address or nil pointer dereference [recovered]
ui     [panic: runtime error: invalid memory address or nil pointer dereference [recovered]
        panic: runtime error: invalid memory address or nil pointer dereference
[signal SIGSEGV: segmentation violation code=0x2 addr=0x28 pc=0x1031d33f8]

goroutine 96 [running]:
github.com/grafana/sobek.(*Runtime).runWrapped.func1()
        /Users/ankuragarwal/go/src/github.com/grafana/k6/vendor/github.com/grafana/sobek/runtime.go:2521 +0xf4
panic({0x103ace0c0?, 0x104c93320?})
        /Users/ankuragarwal/go/pkg/mod/golang.org/toolchain@v0.0.1-go1.23.7.darwin-arm64/src/runtime/panic.go:791 +0x124
github.com/grafana/sobek.(*vm).handleThrow(0x14000258480, {0x103ace0c0, 0x104c93320})
        /Users/ankuragarwal/go/src/github.com/grafana/k6/vendor/github.com/grafana/sobek/vm.go:847 +0x3c4
github.com/grafana/sobek.(*vm).try.func1()
        /Users/ankuragarwal/go/src/github.com/grafana/k6/vendor/github.com/grafana/sobek/vm.go:866 +0x48
panic({0x103ace0c0?, 0x104c93320?})
        /Users/ankuragarwal/go/pkg/mod/golang.org/toolchain@v0.0.1-go1.23.7.darwin-arm64/src/runtime/panic.go:791 +0x124
github.com/grafana/sobek.(*vm).handleThrow(0x14000258480, {0x103ace0c0, 0x104c93320})
        /Users/ankuragarwal/go/src/github.com/grafana/k6/vendor/github.com/grafana/sobek/vm.go:847 +0x3c4
github.com/grafana/sobek.(*vm).runTryInner.func1()
        /Users/ankuragarwal/go/src/github.com/grafana/k6/vendor/github.com/grafana/sobek/vm.go:889 +0x48
panic({0x103ace0c0?, 0x104c93320?})
        /Users/ankuragarwal/go/pkg/mod/golang.org/toolchain@v0.0.1-go1.23.7.darwin-arm64/src/runtime/panic.go:791 +0x124
go.k6.io/k6/internal/js/modules/k6/browser/browser.mapPage.func59({0x0, 0x0}, {0x0, 0x0})
        /Users/ankuragarwal/go/src/github.com/grafana/k6/internal/js/modules/k6/browser/browser/page_mapping.go:582 +0x128
reflect.Value.call({0x103aba700?, 0x140002b7980?, 0x104ed81a8?}, {0x103575271, 0x4}, {0x140006066c0, 0x2, 0x102f72694?})
        /Users/ankuragarwal/go/pkg/mod/golang.org/toolchain@v0.0.1-go1.23.7.darwin-arm64/src/reflect/value.go:584 +0x97c
reflect.Value.Call({0x103aba700?, 0x140002b7980?, 0x104ed81a8?}, {0x140006066c0?, 0x10524f7f8?, 0x104ecc5b8?})
        /Users/ankuragarwal/go/pkg/mod/golang.org/toolchain@v0.0.1-go1.23.7.darwin-arm64/src/reflect/value.go:368 +0x94
github.com/grafana/sobek.(*Runtime).newWrappedFunc.(*Runtime).wrapReflectFunc.func1({{0x103da5610, 0x140004e2570}, {0x140004df0d0, 0x0, 0x1}})
        /Users/ankuragarwal/go/src/github.com/grafana/k6/vendor/github.com/grafana/sobek/runtime.go:2040 +0x2cc
github.com/grafana/sobek.(*nativeFuncObject).vmCall(0x140000ffec0, 0x14000258480, 0x0)
        /Users/ankuragarwal/go/src/github.com/grafana/k6/vendor/github.com/grafana/sobek/func.go:571 +0x168
github.com/grafana/sobek.call.exec(0x258480?, 0x14000258480)
        /Users/ankuragarwal/go/src/github.com/grafana/k6/vendor/github.com/grafana/sobek/vm.go:3732 +0x74
github.com/grafana/sobek.(*vm).run(0x14000258480)
        /Users/ankuragarwal/go/src/github.com/grafana/k6/vendor/github.com/grafana/sobek/vm.go:642 +0x6c
github.com/grafana/sobek.(*vm).runTryInner(0x0?)
        /Users/ankuragarwal/go/src/github.com/grafana/k6/vendor/github.com/grafana/sobek/vm.go:893 +0x50
github.com/grafana/sobek.(*generator).step(0x140004f8700)
        /Users/ankuragarwal/go/src/github.com/grafana/k6/vendor/github.com/grafana/sobek/func.go:770 +0x30
github.com/grafana/sobek.(*generator).next(0x140004f8700, {0x103da5610, 0x140006063c0})
        /Users/ankuragarwal/go/src/github.com/grafana/k6/vendor/github.com/grafana/sobek/func.go:808 +0x178
github.com/grafana/sobek.(*asyncRunner).onFulfilled(0x140004f8700, {{0x103da5c00, 0x104d042e0}, {0x1400070e3b0, 0x1, 0x1}})
        /Users/ankuragarwal/go/src/github.com/grafana/k6/vendor/github.com/grafana/sobek/func.go:694 +0xd4
github.com/grafana/sobek.(*Runtime).callJobCallback(0x140006063c0?, 0x1023a6b7c?, {0x103da5c00?, 0x104d042e0?}, {0x1400070e3b0?, 0x70?, 0x140009a96e8?})
        /Users/ankuragarwal/go/src/github.com/grafana/k6/vendor/github.com/grafana/sobek/runtime.go:2976 +0x58
github.com/grafana/sobek.(*Promise).fulfill.(*Runtime).triggerPromiseReactions.(*Runtime).newPromiseReactionJob.func1.1()
        /Users/ankuragarwal/go/src/github.com/grafana/k6/vendor/github.com/grafana/sobek/builtin_promise.go:214 +0xac
github.com/grafana/sobek.(*vm).try(0x14000258480, 0x140009a9840)
        /Users/ankuragarwal/go/src/github.com/grafana/k6/vendor/github.com/grafana/sobek/vm.go:870 +0x1d8
github.com/grafana/sobek.(*Promise).fulfill.(*Runtime).triggerPromiseReactions.(*Runtime).newPromiseReactionJob.func1()
        /Users/ankuragarwal/go/src/github.com/grafana/k6/vendor/github.com/grafana/sobek/builtin_promise.go:213 +0xc0
github.com/grafana/sobek.(*Runtime).leave(0x140003bc408)
        /Users/ankuragarwal/go/src/github.com/grafana/k6/vendor/github.com/grafana/sobek/runtime.go:2849 +0xe0
github.com/grafana/sobek.(*Runtime).runWrapped(0x140003bc408, 0x14000600008?)
        /Users/ankuragarwal/go/src/github.com/grafana/k6/vendor/github.com/grafana/sobek/runtime.go:2530 +0x84
github.com/grafana/sobek.AssertFunction.func1({0x0?, 0x0?}, {0x1400070e3a0?, 0x0?, 0x0?})
        /Users/ankuragarwal/go/src/github.com/grafana/k6/vendor/github.com/grafana/sobek/runtime.go:2480 +0x78
github.com/grafana/sobek.(*Runtime).wrapPromiseReaction.func1({0x103aadae0?, 0x14000606240?})
        /Users/ankuragarwal/go/src/github.com/grafana/k6/vendor/github.com/grafana/sobek/builtin_promise.go:602 +0xa8
go.k6.io/k6/js/promises.New.func1.1()
        /Users/ankuragarwal/go/src/github.com/grafana/k6/js/promises/promises.go:37 +0x2c
go.k6.io/k6/internal/js/eventloop.(*EventLoop).Start(0x1400045b310, 0x14000562ae0)
        /Users/ankuragarwal/go/src/github.com/grafana/k6/internal/js/eventloop/eventloop.go:177 +0x160
go.k6.io/k6/internal/js.(*VU).runFn(0x140005cc5a0, {0x103d8ff80, 0x140003e0190}, 0x1, 0x1400000d1b8, 0x140005e40b0, {0x140003142c0, 0x1, 0x1})
        /Users/ankuragarwal/go/src/github.com/grafana/k6/internal/js/runner.go:921 +0x1f4
go.k6.io/k6/internal/js.(*ActiveVU).RunOnce(0x14000457ec0)
        /Users/ankuragarwal/go/src/github.com/grafana/k6/internal/js/runner.go:854 +0x3d0
go.k6.io/k6/lib/executor.SharedIterations.Run.getIterationRunner.func8({0x103d8ff48, 0x140005d1410}, {0x103d7d740?, 0x14000457ec0?})
        /Users/ankuragarwal/go/src/github.com/grafana/k6/lib/executor/helpers.go:108 +0x44
go.k6.io/k6/lib/executor.SharedIterations.Run.func6({0x103d86fa8, 0x140005cc5a0})
        /Users/ankuragarwal/go/src/github.com/grafana/k6/lib/executor/shared_iterations.go:259 +0x2dc
created by go.k6.io/k6/lib/executor.SharedIterations.Run in goroutine 94
        /Users/ankuragarwal/go/src/github.com/grafana/k6/lib/executor/shared_iterations.go:271 +0x880
exit status 2

We should avoid this with a clean easy to understand error that the user can work with e.g.:

missing required argument 'url'

k6 version

v1.2.0

OS

NA

Docker version and image (if applicable)

No response

Steps to reproduce the problem

NA

Expected behaviour

Returns a friendly error for the user to action on.

Actual behaviour

Panic and stack trace.

k6 version

v1.2.0

OS

NA

Docker version and image (if applicable)

No response

Steps to reproduce the problem

NA

Expected behaviour

Nice user error.

Actual behaviour

Panic and horrible stack trace.

Metadata

Metadata

Assignees

No one assigned

    Type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions