mirror of
				https://github.com/RGBCube/serenity
				synced 2025-10-31 15:42:44 +00:00 
			
		
		
		
	LibWeb: Don't interpreter invalid CSS pseudo-classes as '*' selector
Bogus pseudo-classes like ":bogus" would actually match every element.
This commit is contained in:
		
							parent
							
								
									3e3d196f06
								
							
						
					
					
						commit
						21bc5fdec3
					
				
					 1 changed files with 15 additions and 12 deletions
				
			
		|  | @ -536,28 +536,32 @@ public: | ||||||
|             if (is_pseudo_element) |             if (is_pseudo_element) | ||||||
|                 return {}; |                 return {}; | ||||||
| 
 | 
 | ||||||
|             if (pseudo_name.equals_ignoring_case("link")) |             if (pseudo_name.equals_ignoring_case("link")) { | ||||||
|                 simple_selector.pseudo_class = CSS::Selector::SimpleSelector::PseudoClass::Link; |                 simple_selector.pseudo_class = CSS::Selector::SimpleSelector::PseudoClass::Link; | ||||||
|             else if (pseudo_name.equals_ignoring_case("visited")) |             } else if (pseudo_name.equals_ignoring_case("visited")) { | ||||||
|                 simple_selector.pseudo_class = CSS::Selector::SimpleSelector::PseudoClass::Visited; |                 simple_selector.pseudo_class = CSS::Selector::SimpleSelector::PseudoClass::Visited; | ||||||
|             else if (pseudo_name.equals_ignoring_case("hover")) |             } else if (pseudo_name.equals_ignoring_case("hover")) { | ||||||
|                 simple_selector.pseudo_class = CSS::Selector::SimpleSelector::PseudoClass::Hover; |                 simple_selector.pseudo_class = CSS::Selector::SimpleSelector::PseudoClass::Hover; | ||||||
|             else if (pseudo_name.equals_ignoring_case("focus")) |             } else if (pseudo_name.equals_ignoring_case("focus")) { | ||||||
|                 simple_selector.pseudo_class = CSS::Selector::SimpleSelector::PseudoClass::Focus; |                 simple_selector.pseudo_class = CSS::Selector::SimpleSelector::PseudoClass::Focus; | ||||||
|             else if (pseudo_name.equals_ignoring_case("first-child")) |             } else if (pseudo_name.equals_ignoring_case("first-child")) { | ||||||
|                 simple_selector.pseudo_class = CSS::Selector::SimpleSelector::PseudoClass::FirstChild; |                 simple_selector.pseudo_class = CSS::Selector::SimpleSelector::PseudoClass::FirstChild; | ||||||
|             else if (pseudo_name.equals_ignoring_case("last-child")) |             } else if (pseudo_name.equals_ignoring_case("last-child")) { | ||||||
|                 simple_selector.pseudo_class = CSS::Selector::SimpleSelector::PseudoClass::LastChild; |                 simple_selector.pseudo_class = CSS::Selector::SimpleSelector::PseudoClass::LastChild; | ||||||
|             else if (pseudo_name.equals_ignoring_case("only-child")) |             } else if (pseudo_name.equals_ignoring_case("only-child")) { | ||||||
|                 simple_selector.pseudo_class = CSS::Selector::SimpleSelector::PseudoClass::OnlyChild; |                 simple_selector.pseudo_class = CSS::Selector::SimpleSelector::PseudoClass::OnlyChild; | ||||||
|             else if (pseudo_name.equals_ignoring_case("empty")) |             } else if (pseudo_name.equals_ignoring_case("empty")) { | ||||||
|                 simple_selector.pseudo_class = CSS::Selector::SimpleSelector::PseudoClass::Empty; |                 simple_selector.pseudo_class = CSS::Selector::SimpleSelector::PseudoClass::Empty; | ||||||
|             else if (pseudo_name.equals_ignoring_case("root")) |             } else if (pseudo_name.equals_ignoring_case("root")) { | ||||||
|                 simple_selector.pseudo_class = CSS::Selector::SimpleSelector::PseudoClass::Root; |                 simple_selector.pseudo_class = CSS::Selector::SimpleSelector::PseudoClass::Root; | ||||||
|             else if (pseudo_name.equals_ignoring_case("before")) |             } else if (pseudo_name.equals_ignoring_case("before")) { | ||||||
|                 simple_selector.pseudo_element = CSS::Selector::SimpleSelector::PseudoElement::Before; |                 simple_selector.pseudo_element = CSS::Selector::SimpleSelector::PseudoElement::Before; | ||||||
|             else if (pseudo_name.equals_ignoring_case("after")) |             } else if (pseudo_name.equals_ignoring_case("after")) { | ||||||
|                 simple_selector.pseudo_element = CSS::Selector::SimpleSelector::PseudoElement::After; |                 simple_selector.pseudo_element = CSS::Selector::SimpleSelector::PseudoElement::After; | ||||||
|  |             } else { | ||||||
|  |                 dbgln("Unknown pseudo class: '{}'", pseudo_name); | ||||||
|  |                 return {}; | ||||||
|  |             } | ||||||
|         } |         } | ||||||
| 
 | 
 | ||||||
|         if (index == index_at_start) { |         if (index == index_at_start) { | ||||||
|  | @ -1008,5 +1012,4 @@ RefPtr<CSS::StyleValue> parse_html_length(const DOM::Document& document, const S | ||||||
|         return CSS::LengthStyleValue::create(CSS::Length::make_px(integer.value())); |         return CSS::LengthStyleValue::create(CSS::Length::make_px(integer.value())); | ||||||
|     return parse_css_value(CSS::ParsingContext(document), string); |     return parse_css_value(CSS::ParsingContext(document), string); | ||||||
| } | } | ||||||
| 
 |  | ||||||
| } | } | ||||||
|  |  | ||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue
	
	 Andreas Kling
						Andreas Kling