From abd5ff08ca3102e3763253436e2f4da839defa39 Mon Sep 17 00:00:00 2001 From: David Florness Date: Sun, 17 Jan 2021 18:14:07 -0500 Subject: [PATCH] Ensure elections exist before using them --- election/msg.go | 28 ++++++++++++++++++++++------ 1 file changed, 22 insertions(+), 6 deletions(-) diff --git a/election/msg.go b/election/msg.go index 5148466..dbf7194 100644 --- a/election/msg.go +++ b/election/msg.go @@ -110,7 +110,11 @@ func OnJoinElectionMessage(source mautrix.EventSource, evt *event.Event, electio return } input := new(big.Int).SetBytes(bytes) - el := elections.Get(content.CreateEventId) + el, exists := elections.GetOk(content.CreateEventId) + if !exists { + log.Warnf("ignoring %s's join since the election doesn't exist", evt.Sender) + return + } el.Lock() defer el.Unlock() if el.Started { @@ -135,7 +139,11 @@ func OnStartElectionMessage(source mautrix.EventSource, evt *event.Event, electi return } // TODO ensure election exists - el := elections.Get(content.CreateEventId) + el, exists := elections.GetOk(content.CreateEventId) + if !exists { + log.Warnf("ignoring %s's election start since the election doesn't exist", evt.Sender) + return + } el.Lock() defer el.Unlock() if evt.Sender != el.Creator { @@ -149,7 +157,7 @@ func OnStartElectionMessage(source mautrix.EventSource, evt *event.Event, electi func OnEvalMessage(source mautrix.EventSource, evt *event.Event, elections *ElectionsMap, localVoter *LocalVoter) { content, ok := evt.Content.Parsed.(*EvalMessageContent) if !ok { - log.Warn("ignoring eval message since we couldn't cast message content to EvalMessageContent") + log.Warn("ignoring %s's eval message since we couldn't cast message content to EvalMessageContent", evt.Sender) return } encodedEncryptedOutput, ok := content.Outputs[localVoter.UserID] @@ -159,13 +167,21 @@ func OnEvalMessage(source mautrix.EventSource, evt *event.Event, elections *Elec } encryptedOutput, err := base64.StdEncoding.DecodeString(encodedEncryptedOutput) if err != nil { - log.Errorf("couldn't decode encrypted output: %s", err) + log.Errorf("couldn't decode %s's encrypted output: %s", evt.Sender, err) + return + } + el, exists := elections.GetOk(content.CreateEventId) + if !exists { + log.Warnf("ignoring %s's eval message since the election doesn't exist", evt.Sender) return } - el := elections.Get(content.CreateEventId) el.Lock() defer el.Unlock() - voter := el.Voters[evt.Sender] + voter, exists := el.Voters[evt.Sender] + if !exists { + log.Warnf("ignoring %s's eval message since they are not a voter", evt.Sender) + return + } var decryptNonce [24]byte copy(decryptNonce[:], encryptedOutput[:24]) -- 2.38.4