Ver código fonte

Ignore webp padding errors. Fixes #549

Tulir Asokan 2 anos atrás
pai
commit
3f59ae3d26
1 arquivos alterados com 8 adições e 3 exclusões
  1. 8 3
      portal.go

+ 8 - 3
portal.go

@@ -2859,7 +2859,7 @@ func (img *PaddedImage) At(x, y int) color.Color {
 func (portal *Portal) convertToWebP(img []byte) ([]byte, error) {
 	decodedImg, _, err := image.Decode(bytes.NewReader(img))
 	if err != nil {
-		return nil, fmt.Errorf("failed to decode image: %w", err)
+		return img, fmt.Errorf("failed to decode image: %w", err)
 	}
 
 	bounds := decodedImg.Bounds()
@@ -2882,7 +2882,7 @@ func (portal *Portal) convertToWebP(img []byte) ([]byte, error) {
 
 	var webpBuffer bytes.Buffer
 	if err = webp.Encode(&webpBuffer, decodedImg, nil); err != nil {
-		return nil, fmt.Errorf("failed to encode png image: %w", err)
+		return img, fmt.Errorf("failed to encode webp image: %w", err)
 	}
 
 	return webpBuffer.Bytes(), nil
@@ -2974,7 +2974,12 @@ func (portal *Portal) preprocessMatrixMedia(ctx context.Context, sender *User, r
 		// Everything is allowed
 	}
 	if convertErr != nil {
-		return nil, util.NewDualError(fmt.Errorf("%w (%s to %s)", errMediaConvertFailed, mimeType, content.Info.MimeType), convertErr)
+		if content.Info.MimeType != mimeType || data == nil {
+			return nil, util.NewDualError(fmt.Errorf("%w (%s to %s)", errMediaConvertFailed, mimeType, content.Info.MimeType), convertErr)
+		} else {
+			// If the mime type didn't change and the errored conversion function returned the original data, just log a warning and continue
+			portal.log.Warnfln("Failed to re-encode %s media: %v, continuing with original file", mimeType, convertErr)
+		}
 	}
 	uploadResp, err := sender.Client.Upload(ctx, data, mediaType)
 	if err != nil {