'assertion failed: self.is_language_range()' panic with fuzzed SVG
Issue Summary
rsvg-convert
exits with an assertion failed: self.is_language_range()
panic when processing a fuzzed SVG:
thread 'main' panicked at /home/s/.cargo/registry/src/index.crates.io-6f17d22bba15001f/language-tags-0.3.2/src/lib.rs:654:9:
assertion failed: self.is_language_range()
Example SVG
<svg>
<style>
:lang(x-cn) { }
</style>
<g xml:lang="en"/>
</svg>
Librsvg Version
Platform
Arch Linux
Additional logs
0: rust_begin_unwind
at /rustc/d18480b84fdbf1efc34f62070951334aa833d761/library/std/src/panicking.rs:645:5
1: core::panicking::panic_fmt
at /rustc/d18480b84fdbf1efc34f62070951334aa833d761/library/core/src/panicking.rs:72:14
2: core::panicking::panic
at /rustc/d18480b84fdbf1efc34f62070951334aa833d761/library/core/src/panicking.rs:144:5
3: language_tags::LanguageTag::matches
at /home/s/.cargo/registry/src/index.crates.io-6f17d22bba15001f/language-tags-0.3.2/src/lib.rs:654:9
4: <rsvg::css::RsvgElement as selectors::tree::Element>::match_non_ts_pseudo_class::{{closure}}::{{closure}}
at ./rsvg/src/css.rs:700:65
5: <core::slice::iter::Iter<T> as core::iter::traits::iterator::Iterator>::any
at /rustc/d18480b84fdbf1efc34f62070951334aa833d761/library/core/src/slice/iter/macros.rs:285:24
6: <rsvg::css::RsvgElement as selectors::tree::Element>::match_non_ts_pseudo_class::{{closure}}
at ./rsvg/src/css.rs:700:41
7: core::option::Option<T>::map_or
at /rustc/d18480b84fdbf1efc34f62070951334aa833d761/library/core/src/option.rs:1132:24
8: <rsvg::css::RsvgElement as selectors::tree::Element>::match_non_ts_pseudo_class
at ./rsvg/src/css.rs:693:49
9: selectors::matching::matches_simple_selector
at /home/s/.cargo/registry/src/index.crates.io-6f17d22bba15001f/selectors-0.25.0/matching.rs:851:13
10: selectors::matching::matches_compound_selector::{{closure}}
at /home/s/.cargo/registry/src/index.crates.io-6f17d22bba15001f/selectors-0.25.0/matching.rs:787:32
11: core::iter::traits::iterator::Iterator::all::check::{{closure}}
at /rustc/d18480b84fdbf1efc34f62070951334aa833d761/library/core/src/iter/traits/iterator.rs:2787:20
12: core::iter::traits::iterator::Iterator::try_fold
at /rustc/d18480b84fdbf1efc34f62070951334aa833d761/library/core/src/iter/traits/iterator.rs:2440:21
13: core::iter::traits::iterator::Iterator::all
at /rustc/d18480b84fdbf1efc34f62070951334aa833d761/library/core/src/iter/traits/iterator.rs:2790:9
14: selectors::matching::matches_compound_selector
at /home/s/.cargo/registry/src/index.crates.io-6f17d22bba15001f/selectors-0.25.0/matching.rs:787:5
15: selectors::matching::matches_complex_selector_internal
at /home/s/.cargo/registry/src/index.crates.io-6f17d22bba15001f/selectors-0.25.0/matching.rs:550:9
16: selectors::matching::matches_complex_selector
at /home/s/.cargo/registry/src/index.crates.io-6f17d22bba15001f/selectors-0.25.0/matching.rs:339:18
17: selectors::matching::matches_selector
at /home/s/.cargo/registry/src/index.crates.io-6f17d22bba15001f/selectors-0.25.0/matching.rs:211:5
18: rsvg::css::Stylesheet::get_matches
at ./rsvg/src/css.rs:977:31
19: rsvg::css::cascade
at ./rsvg/src/css.rs:1036:13
20: rsvg::document::Document::cascade
at ./rsvg/src/document.rs:251:9
21: rsvg::document::DocumentBuilder::build
at ./rsvg/src/document.rs:991:21
22: rsvg::xml::XmlState::build_document
at ./rsvg/src/xml/mod.rs:659:9
23: rsvg::xml::xml_load_from_possibly_compressed_stream
at ./rsvg/src/xml/mod.rs:737:5
24: rsvg::document::Document::load_from_stream
at ./rsvg/src/document.rs:159:9
25: rsvg::api::Loader::read_stream
at ./rsvg/src/api.rs:295:23
26: rsvg_convert::Converter::convert
at ./rsvg_convert/src/main.rs:575:30
27: rsvg_convert::main::{{closure}}
at ./rsvg_convert/src/main.rs:1269:55
28: core::result::Result<T,E>::and_then
at /rustc/d18480b84fdbf1efc34f62070951334aa833d761/library/core/src/result.rs:1321:22
29: rsvg_convert::main
at ./rsvg_convert/src/main.rs:1269:21
30: core::ops::function::FnOnce::call_once
at /rustc/d18480b84fdbf1efc34f62070951334aa833d761/library/core/src/ops/function.rs:250:5