Create copy of filtered messages.

Otherwise it can happen that the modified message is reused and sent to
another session.
This commit is contained in:
Joachim Bauch 2022-07-08 09:49:32 +02:00
parent 5296e09a2e
commit 75e5013dd8
No known key found for this signature in database
GPG key ID: 77C1D22D53E15F02

View file

@ -1173,7 +1173,16 @@ func (s *ClientSession) filterMessage(message *ServerMessage) *ServerMessage {
switch message.Event.Type {
case "join":
if s.HasPermission(PERMISSION_HIDE_DISPLAYNAMES) {
message.Event.Join = filterDisplayNames(message.Event.Join)
// Create unique copy of message for only this client.
message = &ServerMessage{
Id: message.Id,
Type: message.Type,
Event: &EventServerMessage{
Type: message.Event.Type,
Target: message.Event.Target,
Join: filterDisplayNames(message.Event.Join),
},
}
}
case "message":
if message.Event.Message == nil || message.Event.Message.Data == nil || len(*message.Event.Message.Data) == 0 || !s.HasPermission(PERMISSION_HIDE_DISPLAYNAMES) {
@ -1189,7 +1198,19 @@ func (s *ClientSession) filterMessage(message *ServerMessage) *ServerMessage {
if displayName, found := (*data.Chat.Comment)["actorDisplayName"]; found && displayName != "" {
(*data.Chat.Comment)["actorDisplayName"] = ""
if encoded, err := json.Marshal(data); err == nil {
message.Event.Message.Data = (*json.RawMessage)(&encoded)
// Create unique copy of message for only this client.
message = &ServerMessage{
Id: message.Id,
Type: message.Type,
Event: &EventServerMessage{
Type: message.Event.Type,
Target: message.Event.Target,
Message: &RoomEventMessage{
RoomId: message.Event.Message.RoomId,
Data: (*json.RawMessage)(&encoded),
},
},
}
}
}
}