commit 7c4c85b702cda1527a0c5a6f00dc50b312d8ebf6
Author: Joseph Crowell <joseph.w.crowell@gmail.com>
Date: Sun Dec 14 14:45:12 2025 +0000
diff --git a/bridge/matrix/matrix.go b/bridge/matrix/matrix.go
index 0f8985b..dc3134d 100644
--- a/bridge/matrix/matrix.go
+++ b/bridge/matrix/matrix.go
@@ -56 +57 @@ import (
"context"
"encoding/json"
"fmt"
+ "image"
"io"
"mime"
"net/http"
@@ -136 +1412 @@ import (
"sync"
"time"
+ // Initialize specific format decoders,
+ // see https://pkg.go.dev/image
+ _ "image/gif"
+ _ "image/jpeg"
+ _ "image/png"
+
"github.com/matterbridge-org/matterbridge/bridge"
"github.com/matterbridge-org/matterbridge/bridge/config"
"github.com/matterbridge-org/matterbridge/bridge/helper"
@@ -88216 +88929 @@ func (b *Bmatrix) handleUploadFile(msg *config.Message, roomID id.RoomID, fi *co
case strings.Contains(mtype, "image"):
b.Log.Debugf("sendImage %s", res.ContentURI)
- err = b.retry(func() error {
- content := event.MessageEventContent{
- MsgType: event.MsgImage,
- FileName: fi.Name,
- URL: id.ContentURIString(res.ContentURI.String()),
- }
+ cfg, format, err2 := image.DecodeConfig(bytes.NewReader(*fi.Data))
+ if err2 != nil {
+ b.Log.WithError(err2).Errorf("Failed to decode image %s", fi.Name)
+ return
+ }
- _, err2 := b.mc.SendMessageEvent(context.TODO(), roomID, event.EventMessage, content)
+ b.Log.Debugf("Image format detected: %s (%dx%d)", format, cfg.Width, cfg.Height)
- return err2
+ img := event.MessageEventContent{
+ MsgType: event.MsgImage,
+ Body: fi.Name,
+ URL: id.ContentURIString(res.ContentURI.String()),
+ Info: &event.FileInfo{
+ MimeType: mtype,
+ Size: len(*fi.Data),
+ Width: cfg.Width, // #nosec G115 -- go std will not returned negative size
+ Height: cfg.Height, // #nosec G115 -- go std will not returned negative size
+ },
+ }
+
+ err = b.retry(func() error {
+ _, err = b.mc.SendMessageEvent(context.TODO(), roomID, event.EventMessage, img)
+ return err
})
if err != nil {
b.Log.Errorf("sendImage failed: %#v", err)