From a9218159e1d1842b4df993bfa840e3a0c18a0c34 Mon Sep 17 00:00:00 2001 From: Adam Rutkowski Date: Fri, 4 Feb 2022 10:57:44 +0100 Subject: [PATCH 1/2] Check if EncodeLevel is set to avoid nil pointer dereference --- zapcore/json_encoder.go | 2 +- zapcore/json_encoder_test.go | 30 ++++++++++++++++++++++++++++++ 2 files changed, 31 insertions(+), 1 deletion(-) diff --git a/zapcore/json_encoder.go b/zapcore/json_encoder.go index 505c714ac..c5d751b82 100644 --- a/zapcore/json_encoder.go +++ b/zapcore/json_encoder.go @@ -364,7 +364,7 @@ func (enc *jsonEncoder) EncodeEntry(ent Entry, fields []Field) (*buffer.Buffer, final := enc.clone() final.buf.AppendByte('{') - if final.LevelKey != "" { + if final.LevelKey != "" && final.EncodeLevel != nil { final.addKey(final.LevelKey) cur := final.buf.Len() final.EncodeLevel(ent.Level, final) diff --git a/zapcore/json_encoder_test.go b/zapcore/json_encoder_test.go index 944f23a75..0487b10bf 100644 --- a/zapcore/json_encoder_test.go +++ b/zapcore/json_encoder_test.go @@ -136,6 +136,36 @@ func TestJSONEncodeEntry(t *testing.T) { } } +func TestNoEncodeLevelSupplied(t *testing.T) { + + enc := zapcore.NewJSONEncoder(zapcore.EncoderConfig{ + MessageKey: "M", + LevelKey: "L", + TimeKey: "T", + NameKey: "N", + CallerKey: "C", + FunctionKey: "F", + StacktraceKey: "S", + EncodeTime: zapcore.ISO8601TimeEncoder, + EncodeDuration: zapcore.SecondsDurationEncoder, + EncodeCaller: zapcore.ShortCallerEncoder, + }) + + ent := zapcore.Entry{ + Level: zapcore.InfoLevel, + Time: time.Date(2018, 6, 19, 16, 33, 42, 99, time.UTC), + LoggerName: "bob", + Message: "lob law", + } + + fields := []zapcore.Field{ + zap.Int("answer", 42), + } + + _, err := enc.EncodeEntry(ent, fields) + assert.NoError(t, err, "Unexpected JSON encoding error.") +} + func TestJSONEmptyConfig(t *testing.T) { tests := []struct { name string From c2a7c3a7100342172a3adda8cfbde3794ccad42f Mon Sep 17 00:00:00 2001 From: Abhinav Gupta Date: Fri, 4 Feb 2022 08:08:23 -0800 Subject: [PATCH 2/2] Update zapcore/json_encoder_test.go --- zapcore/json_encoder_test.go | 1 - 1 file changed, 1 deletion(-) diff --git a/zapcore/json_encoder_test.go b/zapcore/json_encoder_test.go index 0487b10bf..4c651cf77 100644 --- a/zapcore/json_encoder_test.go +++ b/zapcore/json_encoder_test.go @@ -137,7 +137,6 @@ func TestJSONEncodeEntry(t *testing.T) { } func TestNoEncodeLevelSupplied(t *testing.T) { - enc := zapcore.NewJSONEncoder(zapcore.EncoderConfig{ MessageKey: "M", LevelKey: "L",