Fix crashing on empty regexps (#1870)

This commit is contained in:
sitandr 2023-08-08 15:42:04 +03:00 committed by GitHub
parent 2ea451b83b
commit 1e21fac2ce
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 31 additions and 4 deletions

View File

@ -40,8 +40,22 @@ pub enum Selector {
impl Selector {
/// Define a simple text selector.
pub fn text(text: &str) -> Self {
Self::Regex(Regex::new(&regex::escape(text)).unwrap())
pub fn text(text: &str) -> StrResult<Self> {
if text.is_empty() {
bail!("text selector is empty");
}
Ok(Self::Regex(Regex::new(&regex::escape(text)).unwrap()))
}
/// Define a regex selector.
pub fn regex(regex: Regex) -> StrResult<Self> {
if regex.as_str().is_empty() {
bail!("regex selector is empty");
}
if regex.is_match("") {
bail!("regex matches empty text");
}
Ok(Self::Regex(regex))
}
/// Define a simple [`Selector::Can`] selector.
@ -158,8 +172,8 @@ cast! {
.ok_or("only element functions can be used as selectors")?
.select(),
label: Label => Self::Label(label),
text: EcoString => Self::text(&text),
regex: Regex => Self::Regex(regex),
text: EcoString => Self::text(&text)?,
regex: Regex => Self::regex(regex)?,
location: Location => Self::Location(location),
}

View File

@ -25,6 +25,19 @@ AA (8)
Treeworld, the World of worlds, is a world.
---
// Test there is no crashing on empty strings
// Error: 1:7-1:9 text selector is empty
#show "": []
---
// Error: 1:7-1:16 regex selector is empty
#show regex(""): [AA]
---
// Error: 1:7-1:42 regex matches empty text
#show regex("(VAR_GLOBAL|END_VAR||BOOL)") : []
---
// This is a fun one.
#set par(justify: true)