Thumbnail

rani/matterbridge.git

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

commit cc1644892df2c16898337c32e9bbba0b4efb1489 Author: Wim <wim@42.be> Date: Sat Jul 01 22:43:53 2017 +0000 Fix possible panics. (from @recht matterircd fork) diff --git a/matterclient/matterclient.go b/matterclient/matterclient.go index 4dcc9ae..61eccac 100644 --- a/matterclient/matterclient.go +++ b/matterclient/matterclient.go @@ -2637 +2637 @@ func (m *MMClient) WsReceiver() {     var event model.WebSocketEvent   if err := json.Unmarshal(rawMsg, &event); err == nil && event.IsValid() { - m.log.Debugf("WsReceiver: %#v", event) + m.log.Debugf("WsReceiver event: %#v", event)   msg := &Message{Raw: &event, Team: m.Credentials.Team}   m.parseMessage(msg)   m.MessageChan <- msg @@ -2727 +2727 @@ func (m *MMClient) WsReceiver() {     var response model.WebSocketResponse   if err := json.Unmarshal(rawMsg, &response); err == nil && response.IsValid() { - m.log.Debugf("WsReceiver: %#v", response) + m.log.Debugf("WsReceiver response: %#v", response)   m.parseResponse(response)   continue   } @@ -3057 +3058 @@ func (m *MMClient) parseActionPost(rmsg *Message) {   data := model.PostFromJson(strings.NewReader(rmsg.Raw.Data["post"].(string)))   // we don't have the user, refresh the userlist   if m.GetUser(data.UserId) == nil { - m.UpdateUsers() + m.log.Infof("User %s is not known, ignoring message %s", data) + return   }   rmsg.Username = m.GetUserName(data.UserId)   rmsg.Channel = m.GetChannelName(data.ChannelId) @@ -3669 +36721 @@ func (m *MMClient) GetChannelName(channelId string) string {   m.RLock()   defer m.RUnlock()   for _, t := range m.OtherTeams { - for _, channel := range append(*t.Channels, *t.MoreChannels...) { - if channel.Id == channelId { - return channel.Name + if t == nil { + continue + } + if t.Channels != nil { + for _, channel := range *t.Channels { + if channel.Id == channelId { + return channel.Name + } + } + } + if t.MoreChannels != nil { + for _, channel := range *t.MoreChannels { + if channel.Id == channelId { + return channel.Name + }   }   }   } @@ -6167 +6299 @@ func (m *MMClient) GetTeamFromChannel(channelId string) string {   var channels []*model.Channel   for _, t := range m.OtherTeams {   channels = append(channels, *t.Channels...) - channels = append(channels, *t.MoreChannels...) + if t.MoreChannels != nil { + channels = append(channels, *t.MoreChannels...) + }   for _, c := range channels {   if c.Id == channelId {   return t.Id @@ -6488 +6638 @@ func (m *MMClient) GetUsers() map[string]*model.User {  }    func (m *MMClient) GetUser(userId string) *model.User { - m.RLock() - defer m.RUnlock() + m.Lock() + defer m.Unlock()   return m.Users[userId]  }