Skip to content

Commit

Permalink
Fix fuzz bug with background-position with three numbers; enable back…
Browse files Browse the repository at this point in the history
…ground position minify with calc(); updates #263
  • Loading branch information
tdewolff committed Sep 5, 2019
1 parent 008ade2 commit 1b5a2f7
Show file tree
Hide file tree
Showing 2 changed files with 6 additions and 5 deletions.
6 changes: 3 additions & 3 deletions css/css.go
Expand Up @@ -605,15 +605,15 @@ func (c *cssMinifier) minifyProperty(prop css.Hash, values []Token) []Token {

// background-position or background-size
// TODO: allow only functions that return Number, Percentage or Dimension token. Make whitelist?
if values[i].TokenType == css.NumberToken || values[i].TokenType == css.DimensionToken || values[i].TokenType == css.PercentageToken || values[i].TokenType == css.IdentToken && (h == css.Left || h == css.Right || h == css.Top || h == css.Bottom || h == css.Center) {
if values[i].TokenType == css.NumberToken || values[i].TokenType == css.DimensionToken || values[i].TokenType == css.PercentageToken || values[i].TokenType == css.IdentToken && (h == css.Left || h == css.Right || h == css.Top || h == css.Bottom || h == css.Center) || values[i].TokenType == css.FunctionToken && bytes.Equal(values[i].Data, []byte("calc(")) {
j := i + 1
for ; j < len(values); j++ {
if values[j].TokenType == css.IdentToken {
h := css.ToHash(values[j].Data)
if h == css.Left || h == css.Right || h == css.Top || h == css.Bottom || h == css.Center {
continue
}
} else if values[j].TokenType == css.NumberToken || values[j].TokenType == css.DimensionToken || values[j].TokenType == css.PercentageToken {
} else if values[j].TokenType == css.NumberToken || values[j].TokenType == css.DimensionToken || values[j].TokenType == css.PercentageToken || values[i].TokenType == css.FunctionToken && bytes.Equal(values[i].Data, []byte("calc(")) {
continue
}
break
Expand Down Expand Up @@ -655,7 +655,7 @@ func (c *cssMinifier) minifyProperty(prop css.Hash, values []Token) []Token {
if len(values) == 3 || len(values) == 4 {
// remove zero offsets
for _, i := range []int{len(values) - 1, 1} {
if values[i].TokenType == css.NumberToken && bytes.Equal(values[i].Data, []byte("0")) || values[i].TokenType == css.PercentageToken && bytes.Equal(values[i].Data, []byte("0%")) {
if 2 < len(values) && (values[i].TokenType == css.NumberToken && bytes.Equal(values[i].Data, []byte("0")) || values[i].TokenType == css.PercentageToken && bytes.Equal(values[i].Data, []byte("0%"))) {
values = append(values[:i], values[i+1:]...)
}
}
Expand Down
5 changes: 3 additions & 2 deletions css/css_test.go
Expand Up @@ -58,6 +58,7 @@ func TestCSS(t *testing.T) {
{"input[type=\"\x00\"] { a: b\n}.a{}", "input[type=\"\x00\"]{a:b}.a{}"},
{"a{a:)'''", "a{a:)'''}"},
{"{T:l(", "{t:l(}"},
{"{background:0 0 0", "{background:0 0}"},
}

m := minify.New()
Expand Down Expand Up @@ -159,7 +160,7 @@ func TestCSSInline(t *testing.T) {
{"background:#fff url(foo.svg) no-repeat right .75rem center / auto calc(100% - 1.5rem)", "background:#fff url(foo.svg) no-repeat right .75rem center/auto calc(100% - 1.5rem)"},
{"background:#fff / 5% auto", "background:#fff/5%"},
{"background:#fff / auto 5%", "background:#fff/auto 5%"},
//{"background:calc(5%-2%) center", "background:calc(5%-2%)"},
{"background:calc(5%-2%) center", "background:calc(5%-2%)"},
{"font-weight: bold; font-weight: normal;", "font-weight:700;font-weight:400"},
{"font: caption;", "font:caption"},
{"font: bold 5px \"Times new Roman\",\"Sans-Serif\";", "font:700 5px times new roman,sans-serif"},
Expand Down Expand Up @@ -257,7 +258,7 @@ func TestCSSInline(t *testing.T) {
{"margin: rgb((brackets));", "margin:rgb((brackets))"},

// bugs
//{"background: linear-gradient(-180deg, #355FFF 0%, #1F52FF 100%) 0% 0% / cover", "background: linear-gradient(-180deg, #355FFF 0%, #1F52FF 100%) 0% 0% / cover"}, // #263
{"background: linear-gradient(-180deg, #355FFF 0%, #1F52FF 100%) 0% 0% / cover", "background:linear-gradient(-180deg,#355FFF 0%,#1F52FF 100%) 0 0/cover"}, // #263

// go-fuzz
{"FONT-FAMILY: ru\"", "font-family:ru\""},
Expand Down

0 comments on commit 1b5a2f7

Please sign in to comment.