Browse Source

BugFix: Crash when sending a message to a Peer who is not a Contact

bugfix
Sarah Jamie Lewis 2 months ago
parent
commit
e099f1bf29
  1. 3
      model/message.go
  2. 2
      model/message_test.go
  3. 17
      peer/cwtch_peer.go

3
model/message.go

@ -28,7 +28,6 @@ type Timeline struct {
hashCache map[string][]int
}
// LocallyIndexedMessage is a type wrapper around a Message and a TimeLine Index that is local to this
// instance of the timeline.
type LocallyIndexedMessage struct {
@ -112,7 +111,7 @@ func (t *Timeline) GetMessagesByHash(contentHash string) ([]LocallyIndexedMessag
t.init()
if idxs, exists := t.hashCache[contentHash]; exists {
var messages []LocallyIndexedMessage
for _,idx := range idxs {
for _, idx := range idxs {
messages = append(messages, LocallyIndexedMessage{LocalIndex: idx, Message: t.Messages[idx]})
}
return messages, nil

2
model/message_test.go

@ -106,7 +106,7 @@ func TestTranscriptConsistency(t *testing.T) {
t.Logf("Looking up %v ", hash)
for key,msgs := range timeline.hashCache {
for key, msgs := range timeline.hashCache {
t.Logf("%v %v", key, msgs)
}

17
peer/cwtch_peer.go

@ -524,16 +524,19 @@ func (cp *cwtchPeer) SendMessageToGroupTracked(groupid string, message string) (
}
func (cp *cwtchPeer) SendMessageToPeer(onion string, message string) string {
event := event.NewEvent(event.SendMessageToPeer, map[event.Field]string{event.RemotePeer: onion, event.Data: message})
cp.mutex.Lock()
contact, _ := cp.Profile.GetContact(onion)
event.EventID = strconv.Itoa(contact.Timeline.Len())
cp.Profile.AddSentMessageToContactTimeline(onion, message, time.Now(), event.EventID)
cp.mutex.Unlock()
defer cp.mutex.Unlock()
event := event.NewEvent(event.SendMessageToPeer, map[event.Field]string{event.RemotePeer: onion, event.Data: message})
contact, exists := cp.Profile.GetContact(onion)
// If the contact exists replace the event id wih the index of this message in the contacts timeline...
// Otherwise assume we don't log the message in the timeline...
if exists {
event.EventID = strconv.Itoa(contact.Timeline.Len())
cp.Profile.AddSentMessageToContactTimeline(onion, message, time.Now(), event.EventID)
}
// Regardless we publish the send message to peer event for the protocol engine to execute on...
cp.eventBus.Publish(event)
return event.EventID
}

Loading…
Cancel
Save