-
-
Notifications
You must be signed in to change notification settings - Fork 4.5k
Closed
Description
Caddy version:
v2.9.1
Description:
When using conditional headers (with the ?
prefix) together with an explicit defer
directive inside a named header block, Caddy crashes with a panic (SIGSEGV) at startup instead of gracefully failing or ignoring unnecessary defer directive.
Minimal reproducible config (Caddyfile
):
:80 {
header {
?X-Test-Header "Test value"
defer
}
}
Removing the explicit defer
fixes the issue, as the conditional ?
directive implicitly activates defer.
Expected behavior:
- Caddy should either ignore explicitly defined
defer
in conditional header blocks with?
, or clearly warn/log a configuration error. It should not panic and crash.
Actual behavior:
- Caddy panics with a segmentation fault (SIGSEGV).
Error output:
panic: runtime error: invalid memory address or nil pointer dereference
[signal SIGSEGV: segmentation violation code=0x1 addr=0x28 pc=0x144e77d]
goroutine 1 [running]:
github.com/caddyserver/caddy/v2/modules/caddyhttp/headers.(*HeaderOps).Provision(0xc0001461c0?, {{0x22c77b8, 0xc0006c30e0}, 0xc000115380, 0xc000944960, {0xc0001461c0, 0x2, 0x2}, {0x0, 0x0, ...}, ...})
github.com/caddyserver/caddy/v2@v2.9.1/modules/caddyhttp/headers/headers.go:136 +0x1d
github.com/caddyserver/caddy/v2/modules/caddyhttp/headers.(*Handler).Provision(0x20?, {{0x22c77b8, 0xc0006c30e0}, 0xc000115380, 0xc000944960, {0xc0001461c0, 0x2, 0x2}, {0x0, 0x0, ...}, ...})
github.com/caddyserver/caddy/v2@v2.9.1/modules/caddyhttp/headers/headers.go:65 +0x9c
github.com/caddyserver/caddy/v2.Context.LoadModuleByID({{0x22c77b8, 0xc0006c30e0}, 0xc000115380, 0xc000944960, {0xc0001461c0, 0x2, 0x2}, {0x0, 0x0, 0x0}, ...}, ...)
github.com/caddyserver/caddy/v2@v2.9.1/context.go:391 +0x695
github.com/caddyserver/caddy/v2.Context.loadModuleInline({{0x22c77b8, 0xc0006c30e0}, 0xc000115380, 0xc000944960, {0xc00003b440, 0x1, 0x1}, {0x0, 0x0, 0x0}, ...}, ...)
github.com/caddyserver/caddy/v2@v2.9.1/context.go:441 +0xf0
github.com/caddyserver/caddy/v2.Context.LoadModule({{0x22c77b8, 0xc0006c30e0}, 0xc000115380, 0xc000944960, {0xc00003b440, 0x1, 0x1}, {0x0, 0x0, 0x0}, ...}, ...)
github.com/caddyserver/caddy/v2@v2.9.1/context.go:222 +0x706
github.com/caddyserver/caddy/v2/modules/caddyhttp.(*Route).ProvisionHandlers(0xc000a9ecc8, {{0x22c77b8, 0xc0006c30e0}, 0xc000115380, 0xc000944960, {0xc00003b440, 0x1, 0x1}, {0x0, 0x0, ...}, ...}, ...)
github.com/caddyserver/caddy/v2@v2.9.1/modules/caddyhttp/routes.go:154 +0x71
github.com/caddyserver/caddy/v2/modules/caddyhttp.RouteList.ProvisionHandlers({0xc000a9ea88, 0xf, 0x1d2348b?}, {{0x22c77b8, 0xc0006c30e0}, 0xc000115380, 0xc000944960, {0xc00003b440, 0x1, 0x1}, ...}, ...)
github.com/caddyserver/caddy/v2@v2.9.1/modules/caddyhttp/routes.go:212 +0xa9
github.com/caddyserver/caddy/v2/modules/caddyhttp.(*App).Provision(0xc000ac65b0, {{0x22c77b8, 0xc0006c30e0}, 0xc000115380, 0xc000944960, {0xc00003b440, 0x1, 0x1}, {0x0, 0x0, ...}, ...})
github.com/caddyserver/caddy/v2@v2.9.1/modules/caddyhttp/app.go:367 +0xf25
github.com/caddyserver/caddy/v2.Context.LoadModuleByID({{0x22c77f0, 0xc000362b40}, 0xc000115380, 0xc000944960, {0xc00003b440, 0x1, 0x1}, {0x0, 0x0, 0x0}, ...}, ...)
github.com/caddyserver/caddy/v2@v2.9.1/context.go:391 +0x695
github.com/caddyserver/caddy/v2.Context.App({{0x22c77f0, 0xc000362b40}, 0xc000115380, 0xc000944960, {0x0, 0x0, 0x0}, {0x0, 0x0, 0x0}, ...}, ...)
github.com/caddyserver/caddy/v2@v2.9.1/context.go:467 +0xee
github.com/caddyserver/caddy/v2.provisionContext.func3(...)
github.com/caddyserver/caddy/v2@v2.9.1/caddy.go:545
github.com/caddyserver/caddy/v2.provisionContext(0xc0000633e0?, 0x1)
github.com/caddyserver/caddy/v2@v2.9.1/caddy.go:550 +0x53c
github.com/caddyserver/caddy/v2.run(0xd?, 0x1)
github.com/caddyserver/caddy/v2@v2.9.1/caddy.go:400 +0x78
github.com/caddyserver/caddy/v2.unsyncedDecodeAndRun({0xc000ab1800, 0x1565, 0x1800}, 0x1)
github.com/caddyserver/caddy/v2@v2.9.1/caddy.go:343 +0x145
github.com/caddyserver/caddy/v2.changeConfig({0x1cf2f48, 0x4}, {0x1d06882, 0x7}, {0xc000ab0000, 0x1565, 0x1800}, {0x0, 0x0}, 0x1)
github.com/caddyserver/caddy/v2@v2.9.1/caddy.go:234 +0x6b6
github.com/caddyserver/caddy/v2.Load({0xc000ab0000, 0x1565, 0x1800}, 0x1)
github.com/caddyserver/caddy/v2@v2.9.1/caddy.go:133 +0x22d
github.com/caddyserver/caddy/v2/cmd.cmdRun({0x0?})
github.com/caddyserver/caddy/v2@v2.9.1/cmd/commandfuncs.go:235 +0x831
github.com/caddyserver/caddy/v2/cmd.init.1.func2.WrapCommandFuncForCobra.1(0xc0008d4f08, {0x1cf2fdc?, 0x4?, 0x1cf2f78?})
github.com/caddyserver/caddy/v2@v2.9.1/cmd/cobra.go:141 +0x2f
github.com/spf13/cobra.(*Command).execute(0xc0008d4f08, {0xc0003be740, 0x4, 0x4})
github.com/spf13/cobra@v1.9.1/command.go:1015 +0xa94
github.com/spf13/cobra.(*Command).ExecuteC(0xc0008d4908)
github.com/spf13/cobra@v1.9.1/command.go:1148 +0x40c
github.com/spf13/cobra.(*Command).Execute(...)
github.com/spf13/cobra@v1.9.1/command.go:1071
github.com/caddyserver/caddy/v2/cmd.Main()
github.com/caddyserver/caddy/v2@v2.9.1/cmd/main.go:75 +0x1dd
main.main()
caddy/main.go:16 +0xf
Workaround:
Do not explicitly specify defer
within header blocks that only have conditional (?
) headers, as these already implicitly enable defer
.
Metadata
Metadata
Assignees
Labels
bug 🐞Something isn't workingSomething isn't working