From 2f953fdb95f44078895fec9bc4d542cd371126be Mon Sep 17 00:00:00 2001 From: Jakob Unterwurzacher Date: Mon, 6 Mar 2017 23:50:17 +0100 Subject: [PATCH] contentenc: catch integer underflow in file size calculation If you truncate a ciphertext file to 19 bytes, you could get the impression that the plaintext is 18446744073709551585 bytes long, as reported by "ls -l". Fix it by clamping the value to zero. --- internal/contentenc/offsets.go | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/internal/contentenc/offsets.go b/internal/contentenc/offsets.go index 97d7116..5ad0da4 100644 --- a/internal/contentenc/offsets.go +++ b/internal/contentenc/offsets.go @@ -54,6 +54,11 @@ func (be *ContentEnc) CipherSizeToPlainSize(cipherSize uint64) uint64 { overhead := be.BlockOverhead()*blockCount + HeaderLen + if overhead > cipherSize { + tlog.Warn.Printf("cipherSize %d < overhead %d: corrupt file\n", cipherSize, overhead) + return 0 + } + return cipherSize - overhead }