Clamp the repeat numbers greater than 10000

This was causing a crash in gecko mochitest because of OOM.
This commit is contained in:
Nazım Can Altınova 2017-07-18 11:11:37 -07:00
parent 1ab86a46b6
commit 3f10488da1
2 changed files with 6 additions and 2 deletions

View file

@ -252,7 +252,6 @@
-> Result<(GridTemplateComponent, -> Result<(GridTemplateComponent,
GridTemplateComponent, GridTemplateComponent,
Either<TemplateAreas, None_>), ParseError<'i>> { Either<TemplateAreas, None_>), ParseError<'i>> {
// Other shorthand sub properties also parse `none` and `subgrid` keywords and this // Other shorthand sub properties also parse `none` and `subgrid` keywords and this
// shorthand should know after these keywords there is nothing to parse. Otherwise it // shorthand should know after these keywords there is nothing to parse. Otherwise it
// gets confused and rejects the sub properties that contains `none` or `subgrid`. // gets confused and rejects the sub properties that contains `none` or `subgrid`.

View file

@ -354,8 +354,13 @@ pub enum RepeatCount {
impl Parse for RepeatCount { impl Parse for RepeatCount {
fn parse<'i, 't>(context: &ParserContext, input: &mut Parser<'i, 't>) -> Result<Self, ParseError<'i>> { fn parse<'i, 't>(context: &ParserContext, input: &mut Parser<'i, 't>) -> Result<Self, ParseError<'i>> {
if let Ok(i) = input.try(|i| Integer::parse(context, i)) { // Maximum number of repeat is 10000. The greater numbers should be clamped.
const MAX_LINE: i32 = 10000;
if let Ok(mut i) = input.try(|i| Integer::parse(context, i)) {
if i.value() > 0 { if i.value() > 0 {
if i.value() > MAX_LINE {
i = Integer::new(MAX_LINE);
}
Ok(RepeatCount::Number(i)) Ok(RepeatCount::Number(i))
} else { } else {
Err(StyleParseError::UnspecifiedError.into()) Err(StyleParseError::UnspecifiedError.into())