Skip to content

Commit ce9bdda

Browse files
committed
Fixed infinite loop
- fixed infinite loop when parsing ```{;}```
1 parent 3e94a10 commit ce9bdda

File tree

2 files changed

+28
-3
lines changed

2 files changed

+28
-3
lines changed

parser/parser.go

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -127,7 +127,6 @@ func (parser *Parser) ParseRule() (*css.Rule, error) {
127127
if parser.tokenAtKeyword() {
128128
return parser.parseAtRule()
129129
}
130-
131130
return parser.parseQualifiedRule()
132131
}
133132

@@ -284,6 +283,10 @@ func (parser *Parser) parseQualifiedRule() (*css.Rule, error) {
284283

285284
result.Declarations = declarations
286285

286+
// finished
287+
break
288+
} else if parser.tokenChar(";") {
289+
parser.shiftToken()
287290
// finished
288291
break
289292
} else {

parser/parser_test.go

Lines changed: 24 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -11,11 +11,11 @@ import (
1111
func MustParse(t *testing.T, txt string, nbRules int) *css.Stylesheet {
1212
stylesheet, err := Parse(txt)
1313
if err != nil {
14-
t.Fatal("Failed to parse css", err, txt)
14+
t.Fatal("Failed to parse CSS", err, txt)
1515
}
1616

1717
if len(stylesheet.Rules) != nbRules {
18-
t.Fatal("Failed to parse Qualified Rules", txt)
18+
t.Fatal(fmt.Sprintf("Failed to parse CSS \"%s\", expected %d rules but got %d", txt, nbRules, len(stylesheet.Rules)))
1919
}
2020

2121
return stylesheet
@@ -858,3 +858,25 @@ func TestComments(t *testing.T) {
858858

859859
MustEqualRule(t, rule, expectedRule)
860860
}
861+
862+
func TestInfiniteLoop(t *testing.T) {
863+
input := "{;}"
864+
865+
expectedRule := &css.Rule{
866+
Kind: css.QualifiedRule,
867+
Prelude: "",
868+
Selectors: []*css.Selector{
869+
{
870+
Value: "",
871+
Line: 0,
872+
Column: 0,
873+
},
874+
},
875+
Declarations: []*css.Declaration{},
876+
}
877+
878+
stylesheet := MustParse(t, input, 1)
879+
rule := stylesheet.Rules[0]
880+
881+
MustEqualRule(t, rule, expectedRule)
882+
}

0 commit comments

Comments
 (0)