contenenc: reject all-zero file ID

This should never happen in normal operation and is a sign of
data corruption. Catch it early.
This commit is contained in:
Jakob Unterwurzacher 2017-05-25 14:20:17 +02:00
parent c0e411f81d
commit 2ce269ec63
1 changed files with 8 additions and 0 deletions

View File

@ -5,6 +5,7 @@ package contentenc
// Format: [ "Version" uint16 big endian ] [ "Id" 16 random bytes ]
import (
"bytes"
"encoding/binary"
"log"
"syscall"
@ -41,6 +42,9 @@ func (h *FileHeader) Pack() []byte {
}
// allZeroFileID is preallocated to quickly check if the data read from disk is all zero
var allZeroFileID = make([]byte, headerIDLen)
// ParseHeader - parse "buf" into fileHeader object
func ParseHeader(buf []byte) (*FileHeader, error) {
if len(buf) != HeaderLen {
@ -54,6 +58,10 @@ func ParseHeader(buf []byte) (*FileHeader, error) {
return nil, syscall.EINVAL
}
h.ID = buf[headerVersionLen:]
if bytes.Equal(h.ID, allZeroFileID) {
tlog.Warn.Printf("ParseHeader: file id is all-zero. Returning EINVAL.")
return nil, syscall.EINVAL
}
return &h, nil
}