Thumbnail

rani/matterbridge.git

Clone URL: https://git.buni.party/rani/matterbridge.git

commit d8155160fafbbc6e0a6b0a287d996e4ae0de4288 Author: Wim <wim@42.be> Date: Sat Mar 11 23:10:41 2023 +0000 Add extra error checking for fileinfo (api) (#2015) diff --git a/bridge/api/api.go b/bridge/api/api.go index c0bef0e..cb348f1 100644 --- a/bridge/api/api.go +++ b/bridge/api/api.go @@ -46 +47 @@ import (   "encoding/base64"   "encoding/json"   "net/http" + "strings"   "sync"   "time"   @@ -13912 +14033 @@ func (b *API) handlePostMessage(c echo.Context) error {   message.Account = b.Account   message.ID = ""   message.Timestamp = time.Now() + + var ( + fm map[string]interface{} + ds string + ok bool + ) +   for i, f := range message.Extra["file"] {   fi := config.FileInfo{} - mapstructure.Decode(f.(map[string]interface{}), &fi) - var data []byte + if fm, ok = f.(map[string]interface{}); !ok { + return echo.NewHTTPError(http.StatusInternalServerError, "invalid format for extra") + } + err := mapstructure.Decode(fm, &fi) + if err != nil { + if !strings.Contains(err.Error(), "got string") { + return err + } + }   // mapstructure doesn't decode base64 into []byte, so it must be done manually for fi.Data - data, _ = base64.StdEncoding.DecodeString(f.(map[string]interface{})["Data"].(string)) + if ds, ok = fm["Data"].(string); !ok { + return echo.NewHTTPError(http.StatusInternalServerError, "invalid format for data") + } + + data, err := base64.StdEncoding.DecodeString(ds) + if err != nil { + return err + }   fi.Data = &data   message.Extra["file"][i] = fi   } diff --git a/go.mod b/go.mod index e2379e4..91adf77 100644 --- a/go.mod +++ b/go.mod @@ -336 +337 @@ require (   github.com/mattermost/mattermost-server/v6 v6.7.2   github.com/mattn/godown v0.0.1   github.com/mdp/qrterminal v1.0.1 + github.com/mitchellh/mapstructure v1.5.0   github.com/nelsonken/gomf v0.0.0-20190423072027-c65cc0469e94   github.com/olahol/melody v1.1.2   github.com/paulrosania/go-charset v0.0.0-20190326053356-55c9d7a5834c @@ -967 +976 @@ require (   github.com/minio/minio-go/v7 v7.0.24 // indirect   github.com/minio/sha256-simd v1.0.0 // indirect   github.com/mitchellh/go-homedir v1.1.0 // indirect - github.com/mitchellh/mapstructure v1.5.0 // indirect   github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd // indirect   github.com/modern-go/reflect2 v1.0.2 // indirect   github.com/monaco-io/request v1.0.5 // indirect