summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorRose Hogenson <rosehogenson@posteo.net>2025-12-29 20:59:40 -0800
committerRose Hogenson <rosehogenson@posteo.net>2025-12-29 20:59:40 -0800
commita6840f568b33aa030edafa0d007647f4303a4ca9 (patch)
tree6a67ade0215e9253f295cf36a01c041df38a6192
parentFix clean hole (diff)
downloadroseh.moe-a6840f568b33aa030edafa0d007647f4303a4ca9.tar.zst
Content-Length
-rw-r--r--roseh.moe.go12
1 files changed, 12 insertions, 0 deletions
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
}