publisher: Fix writeStats with quote inside quotes

Fixes #7746
This commit is contained in:
Bjørn Erik Pedersen 2020-09-28 22:17:36 +02:00
parent 4855c186d8
commit 111344113b
No known key found for this signature in database
GPG key ID: 330E6E2BD4859D8F
2 changed files with 11 additions and 2 deletions

View file

@ -67,7 +67,9 @@ type cssClassCollectorWriter struct {
isCollecting bool isCollecting bool
dropValue bool dropValue bool
inQuote bool inQuote bool
quoteValue byte
} }
func (w *cssClassCollectorWriter) Write(p []byte) (n int, err error) { func (w *cssClassCollectorWriter) Write(p []byte) (n int, err error) {
@ -165,7 +167,12 @@ func (c *cssClassCollectorWriter) startCollecting() {
func (c *cssClassCollectorWriter) toggleIfQuote(b byte) { func (c *cssClassCollectorWriter) toggleIfQuote(b byte) {
if isQuote(b) { if isQuote(b) {
c.inQuote = !c.inQuote if c.inQuote && b == c.quoteValue {
c.inQuote = false
} else if !c.inQuote {
c.inQuote = true
c.quoteValue = b
}
} }
} }

View file

@ -87,6 +87,8 @@ func TestClassCollector(t *testing.T) {
{"Alpine transition 1", `<div x-transition:enter-start="opacity-0 transform mobile:-translate-x-8 sm:-translate-y-8">`, f("div", "mobile:-translate-x-8 opacity-0 sm:-translate-y-8 transform", "")}, {"Alpine transition 1", `<div x-transition:enter-start="opacity-0 transform mobile:-translate-x-8 sm:-translate-y-8">`, f("div", "mobile:-translate-x-8 opacity-0 sm:-translate-y-8 transform", "")},
{"Vue bind", `<div v-bind:class="{ active: isActive }"></div>`, f("div", "active", "")}, {"Vue bind", `<div v-bind:class="{ active: isActive }"></div>`, f("div", "active", "")},
// https://github.com/gohugoio/hugo/issues/7746
{"Apostrophe inside attribute value", `<a class="missingclass" title="Plus d'information">my text</a><div></div>`, f("a div", "missingclass", "")},
} { } {
c.Run(test.name, func(c *qt.C) { c.Run(test.name, func(c *qt.C) {
w := newHTMLElementsCollectorWriter(newHTMLElementsCollector()) w := newHTMLElementsCollectorWriter(newHTMLElementsCollector())