From 3fbc735b000f34a1d27b5f7de2e0d3dc3533c1d5 Mon Sep 17 00:00:00 2001 From: Evan Wallace Date: Sun, 8 Aug 2021 06:45:35 -0400 Subject: [PATCH] avoid printing "...` tag inside HTML: + + ```css + /* Original code */ + a:after { + content: ""; + } + + /* Old output */ + a:after { + content: ""; + } + + /* New output */ + a:after { + content: "<\/style>"; + } + ``` + + This mirrors how the JS code generator similarly avoids the character sequence `= 1 && text[i-1] == '<' && strings.HasPrefix(text[i+1:], "style") { + escape = escapeBackslash + } + default: if (p.options.ASCIIOnly && c >= 0x80) || c == '\uFEFF' { escape = escapeHex diff --git a/internal/css_printer/css_printer_test.go b/internal/css_printer/css_printer_test.go index 9f5a0ad697e..d1964e890a8 100644 --- a/internal/css_printer/css_printer_test.go +++ b/internal/css_printer/css_printer_test.go @@ -86,6 +86,11 @@ func TestStringQuote(t *testing.T) { expectPrintedString(t, "f\nG", "\"f\\aG\"") expectPrintedString(t, "f\x01o", "\"f\x01o\"") expectPrintedString(t, "f\to", "\"f\to\"") + + expectPrintedString(t, "", "\"\"") + expectPrintedString(t, "", "\"<\\/style>\"") + expectPrintedString(t, "/style", "\">/style\"") } func TestURLQuote(t *testing.T) { diff --git a/internal/js_printer/js_printer.go b/internal/js_printer/js_printer.go index 2603447b7b2..9569943b6b9 100644 --- a/internal/js_printer/js_printer.go +++ b/internal/js_printer/js_printer.go @@ -216,6 +216,7 @@ func (p *printer) printUnquotedUTF16(text []uint16, quote rune) { js = append(js, "\\\\"...) case '/': + // Avoid generating the sequence "= 2 && text[i-2] == '<' && i+6 <= len(text) && js_lexer.UTF16EqualsString(text[i:i+6], "script") { js = append(js, '\\') }