Skip to content

Commit 58178d9

Browse files
jvoisinfguillot
authored andcommitted
Refactor Sanitize
- Use `token.String()` instead of `html.EscapeString(token.Data)` - Refactor conditions to highlight their similitude, enabling further refactoring This refactoring brings forth at least one bug: `tagStack` is never emptied.
1 parent cc885bb commit 58178d9

File tree

1 file changed

+16
-10
lines changed

1 file changed

+16
-10
lines changed

internal/reader/sanitizer/sanitizer.go

Lines changed: 16 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -111,7 +111,7 @@ func Sanitize(baseURL, input string) string {
111111
continue
112112
}
113113

114-
buffer.WriteString(html.EscapeString(token.Data))
114+
buffer.WriteString(token.String())
115115
case html.StartTagToken:
116116
parentTag = tagName
117117

@@ -121,36 +121,42 @@ func Sanitize(baseURL, input string) string {
121121

122122
if isBlockedTag(tagName) || slices.ContainsFunc(token.Attr, func(attr html.Attribute) bool { return attr.Key == "hidden" }) {
123123
blockedStack = append(blockedStack, tagName)
124-
} else if len(blockedStack) == 0 && isValidTag(tagName) {
125-
attrNames, htmlAttributes := sanitizeAttributes(baseURL, tagName, token.Attr)
124+
continue
125+
}
126126

127+
if len(blockedStack) == 0 && isValidTag(tagName) {
128+
attrNames, htmlAttributes := sanitizeAttributes(baseURL, tagName, token.Attr)
127129
if hasRequiredAttributes(tagName, attrNames) {
128130
if len(attrNames) > 0 {
129131
buffer.WriteString("<" + tagName + " " + htmlAttributes + ">")
130132
} else {
131-
buffer.WriteString("<" + tagName + ">")
133+
buffer.WriteString(token.String())
132134
}
133135

134136
tagStack = append(tagStack, tagName)
135137
}
136138
}
137139
case html.EndTagToken:
138-
if len(blockedStack) > 0 && blockedStack[len(blockedStack)-1] == tagName {
139-
blockedStack = blockedStack[:len(blockedStack)-1]
140-
} else if len(blockedStack) == 0 && isValidTag(tagName) && slices.Contains(tagStack, tagName) {
141-
buffer.WriteString("</" + tagName + ">")
140+
if len(blockedStack) == 0 {
141+
if isValidTag(tagName) && slices.Contains(tagStack, tagName) {
142+
buffer.WriteString(token.String())
143+
}
144+
} else {
145+
if blockedStack[len(blockedStack)-1] == tagName {
146+
blockedStack = blockedStack[:len(blockedStack)-1]
147+
}
142148
}
143149
case html.SelfClosingTagToken:
144150
if isPixelTracker(tagName, token.Attr) {
145151
continue
146152
}
147-
if isValidTag(tagName) && len(blockedStack) == 0 {
153+
if len(blockedStack) == 0 && isValidTag(tagName) {
148154
attrNames, htmlAttributes := sanitizeAttributes(baseURL, tagName, token.Attr)
149155
if hasRequiredAttributes(tagName, attrNames) {
150156
if len(attrNames) > 0 {
151157
buffer.WriteString("<" + tagName + " " + htmlAttributes + "/>")
152158
} else {
153-
buffer.WriteString("<" + tagName + "/>")
159+
buffer.WriteString(token.String())
154160
}
155161
}
156162
}

0 commit comments

Comments
 (0)