summaryrefslogtreecommitdiff
path: root/internal/processing/media
diff options
context:
space:
mode:
Diffstat (limited to 'internal/processing/media')
-rw-r--r--internal/processing/media/create.go2
-rw-r--r--internal/processing/media/getfile.go27
-rw-r--r--internal/processing/media/getfile_test.go14
3 files changed, 17 insertions, 26 deletions
diff --git a/internal/processing/media/create.go b/internal/processing/media/create.go
index eb0c251e9..451a77391 100644
--- a/internal/processing/media/create.go
+++ b/internal/processing/media/create.go
@@ -30,7 +30,7 @@ import (
)
func (p *processor) Create(ctx context.Context, account *gtsmodel.Account, form *apimodel.AttachmentRequest) (*apimodel.Attachment, gtserror.WithCode) {
- data := func(innerCtx context.Context) (io.Reader, int64, error) {
+ data := func(innerCtx context.Context) (io.ReadCloser, int64, error) {
f, err := form.File.Open()
return f, form.File.Size, err
}
diff --git a/internal/processing/media/getfile.go b/internal/processing/media/getfile.go
index 693b8685b..522d47435 100644
--- a/internal/processing/media/getfile.go
+++ b/internal/processing/media/getfile.go
@@ -29,6 +29,7 @@ import (
apimodel "github.com/superseriousbusiness/gotosocial/internal/api/model"
"github.com/superseriousbusiness/gotosocial/internal/gtserror"
"github.com/superseriousbusiness/gotosocial/internal/gtsmodel"
+ "github.com/superseriousbusiness/gotosocial/internal/log"
"github.com/superseriousbusiness/gotosocial/internal/media"
"github.com/superseriousbusiness/gotosocial/internal/uris"
)
@@ -139,7 +140,7 @@ func (p *processor) getAttachmentContent(ctx context.Context, requestingAccount
// if it's the thumbnail that's requested then the user will have to wait a bit while we process the
// large version and derive a thumbnail from it, so use the normal recaching procedure: fetch the media,
// process it, then return the thumbnail data
- data = func(innerCtx context.Context) (io.Reader, int64, error) {
+ data = func(innerCtx context.Context) (io.ReadCloser, int64, error) {
transport, err := p.transportController.NewTransportForUsername(innerCtx, requestingUsername)
if err != nil {
return nil, 0, err
@@ -168,9 +169,9 @@ func (p *processor) getAttachmentContent(ctx context.Context, requestingAccount
bufferedReader := bufio.NewReaderSize(pipeReader, int(attachmentContent.ContentLength))
// the caller will read from the buffered reader, so it doesn't matter if they drop out without reading everything
- attachmentContent.Content = bufferedReader
+ attachmentContent.Content = io.NopCloser(bufferedReader)
- data = func(innerCtx context.Context) (io.Reader, int64, error) {
+ data = func(innerCtx context.Context) (io.ReadCloser, int64, error) {
transport, err := p.transportController.NewTransportForUsername(innerCtx, requestingUsername)
if err != nil {
return nil, 0, err
@@ -195,17 +196,15 @@ func (p *processor) getAttachmentContent(ctx context.Context, requestingAccount
// close the pipewriter after data has been piped into it, so the reader on the other side doesn't block;
// we don't need to close the reader here because that's the caller's responsibility
postDataCallback = func(innerCtx context.Context) error {
- // flush the buffered writer into the buffer of the reader...
- if err := bufferedWriter.Flush(); err != nil {
- return err
- }
-
- // and close the underlying pipe writer
- if err := pipeWriter.Close(); err != nil {
- return err
- }
-
- return nil
+ // close the underlying pipe writer when we're done with it
+ defer func() {
+ if err := pipeWriter.Close(); err != nil {
+ log.Errorf("getAttachmentContent: error closing pipeWriter: %s", err)
+ }
+ }()
+
+ // and flush the buffered writer into the buffer of the reader
+ return bufferedWriter.Flush()
}
}
diff --git a/internal/processing/media/getfile_test.go b/internal/processing/media/getfile_test.go
index 6e5271607..ba7269535 100644
--- a/internal/processing/media/getfile_test.go
+++ b/internal/processing/media/getfile_test.go
@@ -91,10 +91,7 @@ func (suite *GetFileTestSuite) TestGetRemoteFileUncached() {
suite.NotNil(content)
b, err := io.ReadAll(content.Content)
suite.NoError(err)
-
- if closer, ok := content.Content.(io.Closer); ok {
- suite.NoError(closer.Close())
- }
+ suite.NoError(content.Content.Close())
suite.Equal(suite.testRemoteAttachments[testAttachment.RemoteURL].Data, b)
suite.Equal(suite.testRemoteAttachments[testAttachment.RemoteURL].ContentType, content.ContentType)
@@ -151,9 +148,7 @@ func (suite *GetFileTestSuite) TestGetRemoteFileUncachedInterrupted() {
suite.NoError(err)
// close the reader
- if closer, ok := content.Content.(io.Closer); ok {
- suite.NoError(closer.Close())
- }
+ suite.NoError(content.Content.Close())
// the attachment should still be updated in the database even though the caller hung up
if !testrig.WaitFor(func() bool {
@@ -201,10 +196,7 @@ func (suite *GetFileTestSuite) TestGetRemoteFileThumbnailUncached() {
suite.NotNil(content)
b, err := io.ReadAll(content.Content)
suite.NoError(err)
-
- if closer, ok := content.Content.(io.Closer); ok {
- suite.NoError(closer.Close())
- }
+ suite.NoError(content.Content.Close())
suite.Equal(thumbnailBytes, b)
suite.Equal("image/jpeg", content.ContentType)