Description
After upgrading to 1.9.0 (from 1.5.0), our test code is now crashing here in context.go
line 1216:
if !c.engine.ContextWithFallback || c.Request == nil || c.Request.Context() == nil {
The (private) variable engine
is nil
, hence the crash.
How to reproduce
Can't easily boil down our legacy code to a small example.
Expectations
If there's no Value in a context, return nil instead of panicking.
Actual result
Panic:
goroutine 49 [running]:
testing.tRunner.func1.2({0x18df8c0, 0x20f1f00})
/usr/local/go/src/testing/testing.go:1396 +0x24e
testing.tRunner.func1()
/usr/local/go/src/testing/testing.go:1399 +0x39f
panic({0x18df8c0, 0x20f1f00})
/usr/local/go/src/runtime/panic.go:884 +0x212
XXX/gin-gonic/gin.(*Context).Value(0xc0003ba100, {0x1891280?, 0x1b42dd0?})
XXX/vendor/github.com/gin-gonic/gin/context.go:1216 +0xfa
XXX.GetLoggerFromContext({0x1b4e018, 0xc0003ba100})
Environment
- go version: 1.20 and 1.19.7
- gin version (or commit ref): v1.9.0
- operating system: Darwin amd64
Comment From: jcburley
Note that if I change that one line to this, our tests pass:
if c.engine == nil || !c.engine.ContextWithFallback || c.Request == nil || c.Request.Context() == nil {
Comment From: kennburger
Fix proposed here, but not merged yet: https://github.com/gin-gonic/gin/pull/3512