From b66aeac966e7f62e9e623ef478bf74e16f6635c8 Mon Sep 17 00:00:00 2001 From: Azareal Date: Fri, 19 Feb 2021 12:51:13 +1000 Subject: [PATCH] fix some parser corner cases add more parser test cases --- common/parser.go | 12 ++++++------ parser_test.go | 31 +++++++++++++++++++++++++++---- 2 files changed, 33 insertions(+), 10 deletions(-) diff --git a/common/parser.go b/common/parser.go index 90a5b921..52721ddd 100644 --- a/common/parser.go +++ b/common/parser.go @@ -633,8 +633,8 @@ func ParseMessage2(msg string, sectionID int, sectionType string, settings *Pars case 'h', 'f', 'g', '/': //fmt.Println("s3") fch := msg[i+1] - if fch == 't' && len(msg) > i+5 && msg[i+2] == 't' && msg[i+3] == 'p' { - if len(msg) > i+6 && msg[i+4] == 's' && msg[i+5] == ':' && msg[i+6] == '/' { + if msg[i] == 'h' && fch == 't' && len(msg) > i+5 && msg[i+2] == 't' && msg[i+3] == 'p' { + if msg[i+4] == 's' && msg[i+5] == ':' && len(msg) > i+6 && msg[i+6] == '/' { // Do nothing } else if msg[i+4] == ':' && msg[i+5] == '/' { // Do nothing @@ -642,16 +642,16 @@ func ParseMessage2(msg string, sectionID int, sectionType string, settings *Pars continue } } else if len(msg) > i+4 { - if fch == 't' && msg[i+2] == 'p' && msg[i+3] == ':' && msg[i+4] == '/' { + if fch == 't' && msg[i+2] == 'p' && msg[i+3] == ':' && msg[i+4] == '/' && msg[i] == 'f' { // Do nothing - } else if fch == 'i' && msg[i+2] == 't' && msg[i+3] == ':' && msg[i+4] == '/' { + } else if fch == 'i' && msg[i+2] == 't' && msg[i+3] == ':' && msg[i+4] == '/' && msg[i] == 'g' { // Do nothing - } else if fch == '/' { + } else if fch == '/' && msg[i] == '/' { // Do nothing } else { continue } - } else if fch == '/' { + } else if fch == '/' && msg[i] == '/' { // Do nothing } else { continue diff --git a/parser_test.go b/parser_test.go index 6284a9cc..395eaf90 100644 --- a/parser_test.go +++ b/parser_test.go @@ -197,16 +197,17 @@ func TestParser(t *testing.T) { l.Add("http:// t", "[Invalid URL] t") l.Add("g", "g") - l.Add("g/", "//") // todo: fix this + l.Add("g/", "g/") + l.Add("g//", "g//") l.Add("/g", "/g") l.Add("/gg", "/gg") l.Add("/g/", "/g/") l.Add("hi", "hi") l.Add("hit", "hit") l.Add("hit:", "hit:") - l.Add("hit:/", "/") // todo: fix this - l.Add("hit://", "") // todo: fix this - l.Add("hit://t", "t") // todo: fix this + l.Add("hit:/", "hit:/") + l.Add("hit://", "hit://") + l.Add("hit://t", "hit://t") l.Add("h", "h") l.Add("ht", "ht") l.Add("htt", "htt") @@ -216,6 +217,9 @@ func TestParser(t *testing.T) { //t l.Add("http:/d", "http:/d") l.Add("http:d", "http:d") l.Add("https:", "https:") + l.Add("gttps:", "gttps:") + l.Add("gttps:/", "gttps:/") + l.Add("gttps://", "gttps://") l.Add("ftp:", "ftp:") l.Add("git:", "git:") l.Add("ssh:", "ssh:") @@ -424,6 +428,25 @@ func TestParser(t *testing.T) { c.Site.URL = pre c.Config.SslSchema = pre2 + l = &METriList{nil} + l.Add("//", "//") + l.Add("//z", "//z") + l.Add("//"+url, "//"+url) + l.Add("https://www.youtube.com/watch?v=lalalalala&t=1", "https://www.youtube.com/watch?v=lalalalala&t=1") + l.Add("#tid-1", "#tid-1") + c.GuestUser.Perms.AutoLink = false + for _, item := range l.Items { + if res := c.ParseMessage(item.Msg, 1, "forums", nil, nil); res != item.Expects { + if item.Name != "" { + t.Error("Name: ", item.Name) + } + t.Error("Testing string '" + item.Msg + "'") + t.Error("Bad output:", "'"+res+"'") + t.Error("Expected:", "'"+item.Expects+"'") + break + } + } + c.AddHashLinkType("nnid-", func(sb *strings.Builder, msg string, i *int) { tid, intLen := c.CoerceIntString(msg[*i:]) *i += intLen