diff --git a/weed/storage/needle/needle_write.go b/weed/storage/needle/needle_write.go index dd8296b7a..009bf393e 100644 --- a/weed/storage/needle/needle_write.go +++ b/weed/storage/needle/needle_write.go @@ -62,7 +62,17 @@ func WriteNeedleBlob(w backend.BackendStorageFile, dataSlice []byte, size Size, } if version == Version3 { - tsOffset := NeedleHeaderSize + size + NeedleChecksumSize + // compute byte offset as int to compare and slice correctly + tsOffset := int(NeedleHeaderSize) + int(size) + NeedleChecksumSize + // Ensure dataSlice has enough capacity for the timestamp + if tsOffset < 0 { + err = fmt.Errorf("invalid needle size %d results in negative timestamp offset %d", size, tsOffset) + return + } + if tsOffset+TimestampSize > len(dataSlice) { + err = fmt.Errorf("needle blob buffer too small: need %d bytes, have %d", tsOffset+TimestampSize, len(dataSlice)) + return + } util.Uint64toBytes(dataSlice[tsOffset:tsOffset+TimestampSize], appendAtNs) }