From 5f9d53b58638fa7843f6f09ef31264e81112b3dc Mon Sep 17 00:00:00 2001 From: Ben Johnson Date: Tue, 16 Jan 2018 13:14:26 -0700 Subject: [PATCH] Fix LogEntry.UnmarshalBinary() short buffer check. --- tsdb/index/tsi1/log_file.go | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/tsdb/index/tsi1/log_file.go b/tsdb/index/tsi1/log_file.go index d418a13fea..8247f73b85 100644 --- a/tsdb/index/tsi1/log_file.go +++ b/tsdb/index/tsi1/log_file.go @@ -937,6 +937,9 @@ type LogEntry struct { // UnmarshalBinary unmarshals data into e. func (e *LogEntry) UnmarshalBinary(data []byte) error { + var sz uint64 + var n int + orig := data start := len(data) @@ -956,8 +959,9 @@ func (e *LogEntry) UnmarshalBinary(data []byte) error { // Parse name length. if len(data) < 1 { return io.ErrShortBuffer + } else if sz, n = binary.Uvarint(data); n == 0 { + return io.ErrShortBuffer } - sz, n := binary.Uvarint(data) // Read name data. if len(data) < n+int(sz) { @@ -968,8 +972,9 @@ func (e *LogEntry) UnmarshalBinary(data []byte) error { // Parse key length. if len(data) < 1 { return io.ErrShortBuffer + } else if sz, n = binary.Uvarint(data); n == 0 { + return io.ErrShortBuffer } - sz, n = binary.Uvarint(data) // Read key data. if len(data) < n+int(sz) { @@ -980,8 +985,9 @@ func (e *LogEntry) UnmarshalBinary(data []byte) error { // Parse value length. if len(data) < 1 { return io.ErrShortBuffer + } else if sz, n = binary.Uvarint(data); n == 0 { + return io.ErrShortBuffer } - sz, n = binary.Uvarint(data) // Read value data. if len(data) < n+int(sz) {