Skip to content
This repository has been archived by the owner on Mar 15, 2024. It is now read-only.

Segmentation fault with json/no-caller log in v0.14.0-rc.9 #118

Closed
archaron opened this issue Mar 24, 2022 · 0 comments · Fixed by #119
Closed

Segmentation fault with json/no-caller log in v0.14.0-rc.9 #118

archaron opened this issue Mar 24, 2022 · 0 comments · Fixed by #119

Comments

@archaron
Copy link
Contributor

Describe the bug
Setting logger format to JSON and no_caller to true causes an exception:

GOROOT=/home/tsm/.goenv/versions/1.18rc1 #gosetup
GOPATH=/home/tsm/go #gosetup
/home/tsm/.goenv/versions/1.18rc1/bin/go build -o /tmp/GoLand/___go_build_test_delete test-delete #gosetup
/tmp/GoLand/___go_build_test_delete #gosetup
panic: runtime error: invalid memory address or nil pointer dereference
[signal SIGSEGV: segmentation violation code=0x1 addr=0x0 pc=0x626d1b]

goroutine 1 [running]:
go.uber.org/zap/zapcore.(*jsonEncoder).EncodeEntry(0xc000215350, {0x0, {0xc0873d3c24239b3b, 0x2b5028, 0x89ade0}, {0x0, 0x0}, {0x6b663f, 0xd}, {0x1, ...}, ...}, ...)
	/home/tsm/go/pkg/mod/go.uber.org/zap@v1.19.0/zapcore/json_encoder.go:373 +0x25b
go.uber.org/zap/zapcore.(*ioCore).Write(0xc000215380, {0x0, {0xc0873d3c24239b3b, 0x2b5028, 0x89ade0}, {0x0, 0x0}, {0x6b663f, 0xd}, {0x1, ...}, ...}, ...)
	/home/tsm/go/pkg/mod/go.uber.org/zap@v1.19.0/zapcore/core.go:86 +0x7c
go.uber.org/zap/zapcore.(*CheckedEntry).Write(0xc00021c0c0, {0xc000123b40, 0x1, 0x1})
	/home/tsm/go/pkg/mod/go.uber.org/zap@v1.19.0/zapcore/entry.go:220 +0x1d9
go.uber.org/zap.(*Logger).Info(0xc0001246a8?, {0x6b663f?, 0x7159e0?}, {0xc000123b40, 0x1, 0x1})
	/home/tsm/go/pkg/mod/go.uber.org/zap@v1.19.0/logger.go:192 +0x59
github.com/im-kulikov/helium/service.newGroup({{{0x0, 0x0}}, 0xc00010e7e0, {0x8ca7d8, 0x0, 0x0}, 0x0})
	/home/tsm/go/pkg/mod/github.com/im-kulikov/helium@v0.14.0-rc.9/service/service.go:52 +0x24a
reflect.Value.call({0x664d40?, 0x6cc098?, 0x40e4e5?}, {0x6b393f, 0x4}, {0xc000124630, 0x1, 0x30?})
	/home/tsm/.goenv/versions/1.18rc1/src/reflect/value.go:556 +0x845
reflect.Value.Call({0x664d40?, 0x6cc098?, 0x40e847?}, {0xc000124630, 0x1, 0x1})
	/home/tsm/.goenv/versions/1.18rc1/src/reflect/value.go:339 +0xbf
go.uber.org/dig.defaultInvoker({0x664d40?, 0x6cc098?, 0xc0001110b0?}, {0xc000124630?, 0x1?, 0x714378?})
	/home/tsm/go/pkg/mod/go.uber.org/dig@v1.12.0/dig.go:355 +0x28
go.uber.org/dig.(*node).Call(0xc000135720, {0x714378?, 0xc0001445f0})
	/home/tsm/go/pkg/mod/go.uber.org/dig@v1.12.0/dig.go:806 +0x259
go.uber.org/dig.paramSingle.Build({{0x0, 0x0}, 0x0, {0x7159e0, 0x674f60}}, {0x714378, 0xc0001445f0})
	/home/tsm/go/pkg/mod/go.uber.org/dig@v1.12.0/param.go:245 +0x242
go.uber.org/dig.paramList.BuildList({{0x7159e0, 0x664ce0}, {0xc000111000, 0x1, 0x1}}, {0x714378, 0xc0001445f0})
	/home/tsm/go/pkg/mod/go.uber.org/dig@v1.12.0/param.go:201 +0xb9
go.uber.org/dig.(*node).Call(0xc000135540, {0x714378?, 0xc0001445f0})
	/home/tsm/go/pkg/mod/go.uber.org/dig@v1.12.0/dig.go:797 +0xff
go.uber.org/dig.paramSingle.Build({{0x0, 0x0}, 0x0, {0x7159e0, 0x674ee0}}, {0x714378, 0xc0001445f0})
	/home/tsm/go/pkg/mod/go.uber.org/dig@v1.12.0/param.go:245 +0x242
go.uber.org/dig.paramList.BuildList({{0x7159e0, 0x668780}, {0xc000116720, 0x2, 0x2}}, {0x714378, 0xc0001445f0})
	/home/tsm/go/pkg/mod/go.uber.org/dig@v1.12.0/param.go:201 +0xb9
go.uber.org/dig.(*Container).Invoke(0xc0001445f0, {0x668780?, 0x6cc060}, {0x0?, 0x0?, 0x0?})
	/home/tsm/go/pkg/mod/go.uber.org/dig@v1.12.0/dig.go:503 +0x2b9
github.com/im-kulikov/helium.Helium.Run({0xc00011ff00?})
	/home/tsm/go/pkg/mod/github.com/im-kulikov/helium@v0.14.0-rc.9/helium.go:106 +0x2e
main.main()
	/home/tsm/Projects/test-delete/main.go:30 +0xcd

Process finished with the exit code 2

To Reproduce

package main

import (
	"github.com/im-kulikov/helium"
	"github.com/im-kulikov/helium/grace"
	"github.com/im-kulikov/helium/logger"
	"github.com/im-kulikov/helium/module"
	"github.com/im-kulikov/helium/settings"
	"github.com/spf13/viper"
	"go.uber.org/dig"
)

var modules = module.Combine(
	helium.DefaultApp, // default application
	grace.Module,      // grace context
	settings.Module,   // settings module
	logger.Module,     // logger module
)

func main() {
	h, err := helium.New(&helium.Settings{
		Defaults: func(v *viper.Viper) error {
			return defaults(v)
		},
	}, modules)
	if err != nil {
		panic(err)
	}

	err = dig.RootCause(h.Run())
	helium.Catch(err)
}

func defaults(v *viper.Viper) error {
	v.SetDefault("logger.format", "json")
	v.SetDefault("logger.no_caller", true)
	return nil
}

Expected behavior
No exception, log format JSON without caller name.

im-kulikov added a commit that referenced this issue Mar 25, 2022
fix #118 nil caller encoder causes segfault, changed to CallerDisabled option
Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.
Labels
None yet
Projects
None yet
Development

Successfully merging a pull request may close this issue.

1 participant