Skip to content

Doesn't handle bad recover usage #81

@firelizzard18

Description

@firelizzard18

I was doing something dumb. I figured defer recover() would work. Turns out it doesn't. Thankfully, godebug helped me discover this. Because it exploded when it tried to instrument that statement. Maybe add a check and error out saying, "Yo, you're being an idiot. This doesn't work like that." Instead of exploding. Just a thought.

$ godebug build -instrument=my/pkg/path -o out.exe
panic: reflect.Set: value of type *ast.UnaryExpr is not assignable to type *ast.CallExpr

goroutine 1 [running]:
panic(0x6f0200, 0xc085b6b070)
        C:/Tools/Go/src/runtime/panic.go:464 +0x3f4
reflect.Value.assignTo(0x79d2c0, 0xc08737f2e0, 0x16, 0x802440, 0xb, 0x79aac0, 0x0, 0x0, 0x0, 0x0)
        C:/Tools/Go/src/reflect/value.go:2164 +0x3c5
reflect.Value.Set(0x79aac0, 0xc08210e228, 0x196, 0x79d2c0, 0xc08737f2e0, 0x16)
        C:/Tools/Go/src/reflect/value.go:1334 +0x9c
github.com/mailgun/godebug/gen.rewriteRecoverCall(0x2993450, 0xc08210e220, 0x2992bd8, 0xc0820ed880)
        C:/Source/Go/src/github.com/mailgun/godebug/gen/gen.go:1044 +0x3e4
github.com/mailgun/godebug/gen.(*recoverVisitor).Visit(0xc08737f240, 0x2992bd8, 0xc0820ed880, 0x0, 0x0)
        C:/Source/Go/src/github.com/mailgun/godebug/gen/gen.go:1026 +0x223
go/ast.Walk(0x29934d0, 0xc08737f240, 0x2992bd8, 0xc0820ed880)
        C:/Tools/Go/src/go/ast/walk.go:52 +0x5d
go/ast.Walk(0x29934d0, 0xc08737f240, 0x2993450, 0xc08210e220)
        C:/Tools/Go/src/go/ast/walk.go:213 +0x4194
go/ast.walkStmtList(0x29934d0, 0xc08737f220, 0xc082105fc0, 0x2, 0x2)
        C:/Tools/Go/src/go/ast/walk.go:32 +0xdc
go/ast.Walk(0x29934d0, 0xc08737f220, 0x2905ac0, 0xc0820e7a10)
        C:/Tools/Go/src/go/ast/walk.go:224 +0x3e25
go/ast.Walk(0x29934d0, 0xc08737f1c0, 0x2905a90, 0xc0820ed900)
        C:/Tools/Go/src/go/ast/walk.go:231 +0x4054
go/ast.walkStmtList(0x29934d0, 0xc08737efe0, 0xc082110020, 0x2, 0x2)
        C:/Tools/Go/src/go/ast/walk.go:32 +0xdc
go/ast.Walk(0x29934d0, 0xc08737efe0, 0x2905ac0, 0xc0820e7aa0)
        C:/Tools/Go/src/go/ast/walk.go:224 +0x3e25
github.com/mailgun/godebug/gen.rewriteRecoversIn(0xc0820e7aa0, 0x2)
        C:/Source/Go/src/github.com/mailgun/godebug/gen/gen.go:1013 +0x10d
github.com/mailgun/godebug/gen.(*visitor).Visit(0xc0872fe620, 0x2992c38, 0xc08210e2b0, 0x0, 0x0)
        C:/Source/Go/src/github.com/mailgun/godebug/gen/gen.go:606 +0x3784
go/ast.Walk(0x29934a8, 0xc0872fe620, 0x2992c38, 0xc08210e2b0)
        C:/Tools/Go/src/go/ast/walk.go:52 +0x5d
go/ast.Walk(0x29934a8, 0xc0872fe620, 0x2992bd8, 0xc0820ed940)
        C:/Tools/Go/src/go/ast/walk.go:136 +0x1d85
go/ast.Walk(0x29934a8, 0xc0872fe5b0, 0x2993218, 0xc08210e2d0)
        C:/Tools/Go/src/go/ast/walk.go:210 +0x162f
go/ast.walkStmtList(0x29934a8, 0xc08737d420, 0xc08206f280, 0x8, 0x8)
        C:/Tools/Go/src/go/ast/walk.go:32 +0xdc
go/ast.Walk(0x29934a8, 0xc08737d420, 0x2905ac0, 0xc0820e7ad0)
        C:/Tools/Go/src/go/ast/walk.go:224 +0x3e25
go/ast.Walk(0x29934a8, 0xc08737c310, 0x2992de8, 0xc0820e7b00)
        C:/Tools/Go/src/go/ast/walk.go:344 +0xb4d
go/ast.walkDeclList(0x29934a8, 0xc088889180, 0xc082070b00, 0xa, 0x10)
        C:/Tools/Go/src/go/ast/walk.go:38 +0xdc
go/ast.Walk(0x29934a8, 0xc088889180, 0x2a44800, 0xc08206f380)
        C:/Tools/Go/src/go/ast/walk.go:353 +0x29c0
github.com/mailgun/godebug/gen.Generate(0xc0820095c0, 0x893570, 0xc089d2bbd0)
        C:/Source/Go/src/github.com/mailgun/godebug/gen/gen.go:70 +0x9e4
main.generateSourceFiles(0xc08200d040, 0x7f4858, 0x5, 0x0, 0x0)
        C:/Source/Go/src/github.com/mailgun/godebug/cmd.go:404 +0x56c
main.doBuild(0xc082012200, 0x3, 0x3)
        C:/Source/Go/src/github.com/mailgun/godebug/cmd.go:212 +0x226
main.main()
        C:/Source/Go/src/github.com/mailgun/godebug/cmd.go:175 +0x35b

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions