From a6840f568b33aa030edafa0d007647f4303a4ca9 Mon Sep 17 00:00:00 2001 From: Rose Hogenson Date: Mon, 29 Dec 2025 20:59:40 -0800 Subject: Content-Length --- roseh.moe.go | 12 ++++++++++++ 1 file changed, 12 insertions(+) (limited to 'roseh.moe.go') diff --git a/roseh.moe.go b/roseh.moe.go index 59878c4..02428f3 100644 --- a/roseh.moe.go +++ b/roseh.moe.go @@ -261,6 +261,12 @@ func writeHoleFile(part *multipart.Part) (string, error) { return hole, f.Close() } +func decryptedSize(size int64) int64 { + size -= 32 + segments := (size + (blockSize - 1)) / blockSize + return size - segments*16 +} + var errNoHole = errors.New("no such hole") func readHoleFile(w http.ResponseWriter, hole string) error { @@ -277,6 +283,10 @@ func readHoleFile(w http.ResponseWriter, hole string) error { return err } defer f.Close() + stat, err := f.Stat() + if err != nil { + return err + } r := oae2.NewReader(f, encryptionKey, blockSize) buf := make([]byte, 8) if _, err := io.ReadFull(r, buf); err != nil { @@ -289,6 +299,8 @@ func readHoleFile(w http.ResponseWriter, hole string) error { } fileName := string(buf) w.Header().Set("Content-Disposition", "attachment; filename*=UTF-8''"+fileName) + fileSize := decryptedSize(stat.Size()) - 8 - int64(fileNameLen) + w.Header().Set("Content-Length", strconv.FormatInt(fileSize, 10)) _, err = io.Copy(w, r) return err } -- cgit v1.3.1