| Index: Source/core/css/CSSGrammar.y
|
| diff --git a/Source/core/css/CSSGrammar.y b/Source/core/css/CSSGrammar.y
|
| index 97d1672e06a11feead3e4e79a15d887a78189d15..0555e419982dc33610130b576aeb49067ee5e779 100644
|
| --- a/Source/core/css/CSSGrammar.y
|
| +++ b/Source/core/css/CSSGrammar.y
|
| @@ -288,6 +288,8 @@ inline static CSSParserValue makeIdentValue(CSSParserString string)
|
| %type <rule> viewport
|
| %type <boolean> keyframes_rule_start
|
|
|
| +%type <boolean> closing_square_bracket
|
| +%type <boolean> closing_parenthesis
|
| %type <string> maybe_ns_prefix
|
|
|
| %type <string> namespace_selector
|
| @@ -455,13 +457,21 @@ closing_brace:
|
| ;
|
|
|
| closing_parenthesis:
|
| - ')'
|
| - | %prec LOWEST_PREC TOKEN_EOF
|
| + ')' { $$ = true; }
|
| + | %prec LOWEST_PREC TOKEN_EOF {
|
| + // While parsing query selector's selector text, we should not
|
| + // allow missing closing parenthesis.
|
| + $$ = !parser->m_selectorListForParseSelector;
|
| + }
|
| ;
|
|
|
| closing_square_bracket:
|
| - ']'
|
| - | %prec LOWEST_PREC TOKEN_EOF
|
| + ']' { $$ = true; }
|
| + | %prec LOWEST_PREC TOKEN_EOF {
|
| + // While parsing query selector's selector text, we should not
|
| + // allow missing closing square bracket.
|
| + $$ = !parser->m_selectorListForParseSelector;
|
| + }
|
| ;
|
|
|
| semi_or_eof:
|
| @@ -1242,22 +1252,30 @@ attr_name:
|
|
|
| attrib:
|
| '[' maybe_space attr_name closing_square_bracket {
|
| + if (!$4)
|
| + YYERROR;
|
| $$ = parser->createFloatingSelector();
|
| $$->setAttribute(QualifiedName(nullAtom, $3, nullAtom));
|
| $$->setMatch(CSSSelector::Set);
|
| }
|
| | '[' maybe_space attr_name match maybe_space ident_or_string maybe_space closing_square_bracket {
|
| + if (!$8)
|
| + YYERROR;
|
| $$ = parser->createFloatingSelector();
|
| $$->setAttribute(QualifiedName(nullAtom, $3, nullAtom));
|
| $$->setMatch((CSSSelector::Match)$4);
|
| $$->setValue($6);
|
| }
|
| | '[' maybe_space namespace_selector attr_name closing_square_bracket {
|
| + if (!$5)
|
| + YYERROR;
|
| $$ = parser->createFloatingSelector();
|
| $$->setAttribute(parser->determineNameInNamespace($3, $4));
|
| $$->setMatch(CSSSelector::Set);
|
| }
|
| | '[' maybe_space namespace_selector attr_name match maybe_space ident_or_string maybe_space closing_square_bracket {
|
| + if (!$9)
|
| + YYERROR;
|
| $$ = parser->createFloatingSelector();
|
| $$->setAttribute(parser->determineNameInNamespace($3, $4));
|
| $$->setMatch((CSSSelector::Match)$5);
|
| @@ -1337,6 +1355,8 @@ pseudo:
|
| }
|
| // used by ::cue(:past/:future)
|
| | ':' ':' CUEFUNCTION maybe_space simple_selector_list maybe_space closing_parenthesis {
|
| + if (!$7)
|
| + YYERROR;
|
| $$ = parser->createFloatingSelector();
|
| $$->setMatch(CSSSelector::PseudoElement);
|
| $$->adoptSelectorVector(*parser->sinkFloatingSelectorVector($5));
|
| @@ -1354,6 +1374,8 @@ pseudo:
|
| // See http://lists.w3.org/Archives/Public/www-style/2010Sep/0566.html for some
|
| // related discussion with respect to :not.
|
| | ':' ANYFUNCTION maybe_space simple_selector_list maybe_space closing_parenthesis {
|
| + if (!$6)
|
| + YYERROR;
|
| $$ = parser->createFloatingSelector();
|
| $$->setMatch(CSSSelector::PseudoClass);
|
| $$->adoptSelectorVector(*parser->sinkFloatingSelectorVector($4));
|
| @@ -1368,6 +1390,8 @@ pseudo:
|
| }
|
| // used by :nth-*(ax+b)
|
| | ':' FUNCTION maybe_space NTH maybe_space closing_parenthesis {
|
| + if (!$6)
|
| + YYERROR;
|
| $$ = parser->createFloatingSelector();
|
| $$->setMatch(CSSSelector::PseudoClass);
|
| $$->setArgument($4);
|
| @@ -1378,6 +1402,8 @@ pseudo:
|
| }
|
| // used by :nth-*
|
| | ':' FUNCTION maybe_space maybe_unary_operator INTEGER maybe_space closing_parenthesis {
|
| + if (!$7)
|
| + YYERROR;
|
| $$ = parser->createFloatingSelector();
|
| $$->setMatch(CSSSelector::PseudoClass);
|
| $$->setArgument(AtomicString::number($4 * $5));
|
| @@ -1388,6 +1414,8 @@ pseudo:
|
| }
|
| // used by :nth-*(odd/even) and :lang
|
| | ':' FUNCTION maybe_space IDENT maybe_space closing_parenthesis {
|
| + if (!$6)
|
| + YYERROR;
|
| $$ = parser->createFloatingSelector();
|
| $$->setMatch(CSSSelector::PseudoClass);
|
| $$->setArgument($4);
|
| @@ -1409,6 +1437,8 @@ pseudo:
|
| }
|
| // used by :not
|
| | ':' NOTFUNCTION maybe_space simple_selector maybe_space closing_parenthesis {
|
| + if (!$6)
|
| + YYERROR;
|
| if (!$4->isSimple())
|
| YYERROR;
|
| else {
|
| @@ -1427,6 +1457,8 @@ pseudo:
|
| YYERROR;
|
| }
|
| | ':' HOSTFUNCTION maybe_space simple_selector_list maybe_space closing_parenthesis {
|
| + if (!$6)
|
| + YYERROR;
|
| $$ = parser->createFloatingSelector();
|
| $$->setMatch(CSSSelector::PseudoClass);
|
| $$->adoptSelectorVector(*parser->sinkFloatingSelectorVector($4));
|
| @@ -1441,6 +1473,8 @@ pseudo:
|
| }
|
| // used by :host-context()
|
| | ':' HOSTCONTEXTFUNCTION maybe_space simple_selector_list maybe_space closing_parenthesis {
|
| + if (!$6)
|
| + YYERROR;
|
| $$ = parser->createFloatingSelector();
|
| $$->setMatch(CSSSelector::PseudoClass);
|
| $$->adoptSelectorVector(*parser->sinkFloatingSelectorVector($4));
|
|
|