CipherSizeToPlainSize: Handle illegal states

A file never gets a cipherSize <= HEADER_LEN in normal operation.
However, this can happen if header write it interrupted or the
underlying filesystem does not support fallocate.

Noticed while trying to store a CIPHERDIR in another gocryptfs mount
(gocryptfs does not support fallocate)
This commit is contained in:
Jakob Unterwurzacher 2015-11-15 14:15:21 +01:00
parent 09499be6e9
commit 296bdf3af2

View File

@ -30,6 +30,16 @@ func (be *CryptFS) CipherSizeToPlainSize(cipherSize uint64) uint64 {
return 0 return 0
} }
if cipherSize == HEADER_LEN {
Warn.Printf("cipherSize %d == header size: interrupted write?\n", cipherSize)
return 0
}
if cipherSize < HEADER_LEN {
Warn.Printf("cipherSize %d < header size: corrupt file\n", cipherSize)
return 0
}
// Block number at last byte // Block number at last byte
blockNo := be.CipherOffToBlockNo(cipherSize - 1) blockNo := be.CipherOffToBlockNo(cipherSize - 1)
blockCount := blockNo + 1 blockCount := blockNo + 1