From 740bf82a1ed4d1125f2ea0264496d81ed2f98093 Mon Sep 17 00:00:00 2001 From: cathugger Date: Mon, 3 Dec 2018 14:54:08 +0200 Subject: [PATCH] srnd: properly parse email addresses this replaces faulty address parsing code with calls to stdlib' email parser and some reasonable fallbacks. note that nntpArticle.Email() function was completely incorrect, but it's not used anywhere in code, apparently. --- contrib/backends/srndv2/src/srnd/message.go | 32 ++++++++++++++------- 1 file changed, 21 insertions(+), 11 deletions(-) diff --git a/contrib/backends/srndv2/src/srnd/message.go b/contrib/backends/srndv2/src/srnd/message.go index dc08be7..e12cebe 100644 --- a/contrib/backends/srndv2/src/srnd/message.go +++ b/contrib/backends/srndv2/src/srnd/message.go @@ -295,12 +295,20 @@ func (self *nntpArticle) Newsgroup() string { } func (self *nntpArticle) Name() string { - from := self.headers.Get("From", "anonymous ") - idx := strings.Index(from, "<") - if idx > 1 { - return from[:idx] + const defname = "Anonymous" + from := strings.TrimSpace(self.headers.Get("From", "")) + if from == "" { + return defname } - return "[Invalid From header]" + a, e := mail.ParseAddress(from) + if e != nil { + return fmt.Sprintf("[Invalid From header: %v]", e) + } + name := strings.TrimSpace(a.Name) + if name == "" { + return defname + } + return name } func (self *nntpArticle) Addr() (addr string) { @@ -327,13 +335,15 @@ func (self *nntpArticle) Addr() (addr string) { } func (self *nntpArticle) Email() string { - from := self.headers.Get("From", "anonymous ") - idx := strings.Index(from, "<") - if idx > 2 { - return from[:idx-2] + from := strings.TrimSpace(self.headers.Get("From", "")) + if from == "" { + return "" } - return "[Invalid From header]" - + a, e := mail.ParseAddress(from) + if e != nil { + return fmt.Sprintf("[Invalid From header: %v]", e) + } + return a.Address } func (self *nntpArticle) Subject() string {