From efe9d0a5f8097fb40d440d9f4013801b49d93b9e Mon Sep 17 00:00:00 2001 From: Joram Wilander Date: Tue, 7 May 2019 09:14:35 -0400 Subject: [PATCH] Fix panic in markdown link parsing (#10785) --- utils/markdown/autolink.go | 4 ++++ utils/markdown/autolink_test.go | 12 ++++++++++++ 2 files changed, 16 insertions(+) diff --git a/utils/markdown/autolink.go b/utils/markdown/autolink.go index 7f7d1117f1..d362151aa7 100644 --- a/utils/markdown/autolink.go +++ b/utils/markdown/autolink.go @@ -78,6 +78,10 @@ func parseURLAutolink(data string, position int) (Range, bool) { start -= 1 } + if start < 0 || position >= len(data) { + return Range{}, false + } + // Ensure that the URL scheme is allowed and that at least one character after the scheme is valid. scheme := data[start:position] if !isSchemeAllowed(scheme) || !isValidHostCharacter(data[position+3:]) { diff --git a/utils/markdown/autolink_test.go b/utils/markdown/autolink_test.go index 997124338a..c0e07f327b 100644 --- a/utils/markdown/autolink_test.go +++ b/utils/markdown/autolink_test.go @@ -130,6 +130,18 @@ func TestParseURLAutolink(t *testing.T) { Position: 14, Expected: "http://example.com", }, + { + Description: "bad link protocol", + Input: "://///", + Position: 0, + Expected: "", + }, + { + Description: "position greater than input length", + Input: "there is no colon", + Position: 1000, + Expected: "", + }, } for _, testCase := range testCases {