Skip to content

Commit 03fbf19

Browse files
boxerabtlsa
authored andcommitted
parseSelector: plug memory leaks, and don't set result until error free complete
1 parent f04a25d commit 03fbf19

File tree

1 file changed

+9
-5
lines changed

1 file changed

+9
-5
lines changed

src/parse/language.c

Lines changed: 9 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1737,16 +1737,17 @@ css_error parseSelector(css_language *c, const parserutils_vector *vector,
17371737
error = parseSimpleSelector(c, vector, ctx, &selector);
17381738
if (error != CSS_OK)
17391739
return error;
1740-
*result = selector;
17411740

17421741
while ((token = parserutils_vector_peek(vector, *ctx)) != NULL &&
17431742
tokenIsChar(token, ',') == false) {
17441743
css_combinator comb = CSS_COMBINATOR_NONE;
17451744
css_selector *other = NULL;
17461745

17471746
error = parseCombinator(c, vector, ctx, &comb);
1748-
if (error != CSS_OK)
1747+
if (error != CSS_OK) {
1748+
css__stylesheet_selector_destroy(c->sheet, selector);
17491749
return error;
1750+
}
17501751

17511752
/* In the case of "html , body { ... }", the whitespace after
17521753
* "html" and "body" will be considered an ancestor combinator.
@@ -1761,21 +1762,24 @@ css_error parseSelector(css_language *c, const parserutils_vector *vector,
17611762
continue;
17621763

17631764
error = parseSimpleSelector(c, vector, ctx, &other);
1764-
if (error != CSS_OK)
1765+
if (error != CSS_OK) {
1766+
css__stylesheet_selector_destroy(c->sheet, selector);
17651767
return error;
1766-
1767-
*result = other;
1768+
}
17681769

17691770
error = css__stylesheet_selector_combine(c->sheet,
17701771
comb, selector, other);
17711772
if (error != CSS_OK) {
17721773
css__stylesheet_selector_destroy(c->sheet, selector);
1774+
css__stylesheet_selector_destroy(c->sheet, other);
17731775
return error;
17741776
}
17751777

17761778
selector = other;
17771779
}
17781780

1781+
*result = selector;
1782+
17791783
return CSS_OK;
17801784
}
17811785

0 commit comments

Comments
 (0)