From 0a9bff5897a2e69f887d3ab10865a4e017120982 Mon Sep 17 00:00:00 2001 From: Ido Nov Date: Sun, 26 Sep 2021 17:24:10 +0300 Subject: [PATCH 1/2] fix issue 5284 by adding missing self closing tag --- internal/markup/markup.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/internal/markup/markup.go b/internal/markup/markup.go index 788708e73..1804c3d6a 100644 --- a/internal/markup/markup.go +++ b/internal/markup/markup.go @@ -170,7 +170,7 @@ var ( rightAngleBracket = []byte(">") ) -var noEndTags = []string{"input", "br", "hr", "img"} +var noEndTags = []string{"input", "br", "hr", "img", "sup"} // wrapImgWithLink warps link to standalone tags. func wrapImgWithLink(urlPrefix string, buf *bytes.Buffer, token html.Token) { From 154681c2a63ab2422dd6a2fab72f03c173387b89 Mon Sep 17 00:00:00 2001 From: Ido Nov Date: Thu, 30 Sep 2021 15:35:23 +0300 Subject: [PATCH 2/2] Add checks to prevent errors in rendering html --- internal/markup/markup.go | 27 +++++++++++++-------------- 1 file changed, 13 insertions(+), 14 deletions(-) diff --git a/internal/markup/markup.go b/internal/markup/markup.go index 1804c3d6a..745b66009 100644 --- a/internal/markup/markup.go +++ b/internal/markup/markup.go @@ -7,7 +7,6 @@ package markup import ( "bytes" "fmt" - "io" "strings" "github.com/unknwon/com" @@ -289,27 +288,27 @@ OUTER_LOOP: } case html.EndTagToken: - if len(startTags) == 0 { - buf.WriteString(token.String()) - break + if com.IsSliceContainsStr(startTags, token.Data){ + for startTags[len(startTags)-1] != token.Data && len(startTags) > 1 { + buf.WriteString(ClosingTag(startTags[len(startTags)-1])) + startTags = startTags[:len(startTags)-1] + } + buf.WriteString(ClosingTag(startTags[len(startTags)-1])) + startTags = startTags[:len(startTags)-1] } - - buf.Write(leftAngleBracket) - buf.WriteString(startTags[len(startTags)-1]) - buf.Write(rightAngleBracket) - startTags = startTags[:len(startTags)-1] default: buf.WriteString(token.String()) } } - if io.EOF == tokenizer.Err() { - return buf.Bytes() + for i := len(startTags)-1; i >= 0; i-- { + buf.WriteString(ClosingTag(startTags[i])) } - // If we are not at the end of the input, then some other parsing error has occurred, - // so return the input verbatim. - return rawHTML + return buf.Bytes() +} +func ClosingTag(s string) string{ + return string(leftAngleBracket) + s + string(rightAngleBracket) } type Type string