From 4db9c807407c99a6386c896a1159dfd9bd5b34eb Mon Sep 17 00:00:00 2001
From: Travis Ralston <travpc@gmail.com>
Date: Thu, 8 Jun 2023 22:13:37 -0600
Subject: [PATCH] Fix file system buffering/cleanup

---
 datastores/buffer.go | 16 ++++++----------
 1 file changed, 6 insertions(+), 10 deletions(-)

diff --git a/datastores/buffer.go b/datastores/buffer.go
index 3ef1221d..ed6259e6 100644
--- a/datastores/buffer.go
+++ b/datastores/buffer.go
@@ -7,11 +7,9 @@ import (
 	"errors"
 	"io"
 	"os"
-	"path"
 
 	"github.com/sirupsen/logrus"
 	"github.com/turt2live/matrix-media-repo/common/config"
-	"github.com/turt2live/matrix-media-repo/util/ids"
 )
 
 func BufferTemp(datastore config.DatastoreConfig, contents io.ReadCloser) (string, int64, io.ReadCloser, error) {
@@ -20,13 +18,7 @@ func BufferTemp(datastore config.DatastoreConfig, contents io.ReadCloser) (strin
 	if datastore.Type == "s3" {
 		fpath = datastore.Options["tempPath"]
 	} else if datastore.Type == "file" {
-		var id string
-		id, err = ids.NewUniqueId()
-		if err != nil {
-			return "", 0, nil, errors.New("error generating temporary file ID: " + err.Error())
-		}
-		fpath = path.Join(os.TempDir(), id)
-		fpath, err = os.MkdirTemp(fpath, "mmr")
+		fpath, err = os.MkdirTemp(os.TempDir(), "mmr")
 		if err != nil {
 			return "", 0, nil, errors.New("error generating temporary directory: " + err.Error())
 		}
@@ -98,6 +90,10 @@ func (c *tempFileCloser) Close() error {
 	if c.closed {
 		return nil
 	}
+	var upstreamErr error
+	if upstreamErr = c.upstream.Close(); upstreamErr != nil {
+		// don't return the error yet because we want to try to delete the temp file
+	}
 	var err error
 	if err = os.Remove(c.fname); err != nil {
 		return err
@@ -106,7 +102,7 @@ func (c *tempFileCloser) Close() error {
 		return err
 	}
 	c.closed = true
-	return c.upstream.Close()
+	return upstreamErr
 }
 
 func (c *tempFileCloser) Read(p []byte) (n int, err error) {
-- 
GitLab