threading: fix stack overflow from faulty headers
Fix stack overflow from faulty headers that cause a circularity in the threading algorithm. Remove duplicated message-ids in the references headers. Check that the message-id itself is not part of the references. Fixes: https://todo.sr.ht/~rjarry/aerc/32 Signed-off-by: Koni Marti <koni.marti@gmail.com> Tested-by: Robin Jarry <robin@jarry.cc> Acked-by: Robin Jarry <robin@jarry.cc>
This commit is contained in:
parent
4c699d35f8
commit
93c160ab66
1 changed files with 13 additions and 1 deletions
|
@ -200,7 +200,19 @@ func (t *threadable) MessageThreadReferences() []string {
|
||||||
}
|
}
|
||||||
refs = []string{inreplyto}
|
refs = []string{inreplyto}
|
||||||
}
|
}
|
||||||
return refs
|
return cleanRefs(t.MessageThreadID(), refs)
|
||||||
|
}
|
||||||
|
|
||||||
|
func cleanRefs(m string, refs []string) []string {
|
||||||
|
considered := make(map[string]interface{})
|
||||||
|
cleanRefs := make([]string, 0, len(refs))
|
||||||
|
for _, r := range refs {
|
||||||
|
if _, seen := considered[r]; r != m && !seen {
|
||||||
|
considered[r] = nil
|
||||||
|
cleanRefs = append(cleanRefs, r)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return cleanRefs
|
||||||
}
|
}
|
||||||
|
|
||||||
func (t *threadable) Subject() string {
|
func (t *threadable) Subject() string {
|
||||||
|
|
Loading…
Reference in a new issue