Add checks to prevent errors in rendering html

pull/6622/head
Ido Nov 2021-09-30 15:35:23 +03:00
parent 0a9bff5897
commit 154681c2a6
1 changed files with 13 additions and 14 deletions

View File

@ -7,7 +7,6 @@ package markup
import ( import (
"bytes" "bytes"
"fmt" "fmt"
"io"
"strings" "strings"
"github.com/unknwon/com" "github.com/unknwon/com"
@ -289,27 +288,27 @@ OUTER_LOOP:
} }
case html.EndTagToken: case html.EndTagToken:
if len(startTags) == 0 { if com.IsSliceContainsStr(startTags, token.Data){
buf.WriteString(token.String()) for startTags[len(startTags)-1] != token.Data && len(startTags) > 1 {
break 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: default:
buf.WriteString(token.String()) buf.WriteString(token.String())
} }
} }
if io.EOF == tokenizer.Err() { for i := len(startTags)-1; i >= 0; i-- {
return buf.Bytes() buf.WriteString(ClosingTag(startTags[i]))
} }
// If we are not at the end of the input, then some other parsing error has occurred, return buf.Bytes()
// so return the input verbatim. }
return rawHTML func ClosingTag(s string) string{
return string(leftAngleBracket) + s + string(rightAngleBracket)
} }
type Type string type Type string