mirror of
https://github.com/typst/typst
synced 2025-05-14 17:15:28 +08:00
Fix crashing on empty regexps (#1870)
This commit is contained in:
parent
2ea451b83b
commit
1e21fac2ce
@ -40,8 +40,22 @@ pub enum Selector {
|
|||||||
|
|
||||||
impl Selector {
|
impl Selector {
|
||||||
/// Define a simple text selector.
|
/// Define a simple text selector.
|
||||||
pub fn text(text: &str) -> Self {
|
pub fn text(text: &str) -> StrResult<Self> {
|
||||||
Self::Regex(Regex::new(®ex::escape(text)).unwrap())
|
if text.is_empty() {
|
||||||
|
bail!("text selector is empty");
|
||||||
|
}
|
||||||
|
Ok(Self::Regex(Regex::new(®ex::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.
|
/// Define a simple [`Selector::Can`] selector.
|
||||||
@ -158,8 +172,8 @@ cast! {
|
|||||||
.ok_or("only element functions can be used as selectors")?
|
.ok_or("only element functions can be used as selectors")?
|
||||||
.select(),
|
.select(),
|
||||||
label: Label => Self::Label(label),
|
label: Label => Self::Label(label),
|
||||||
text: EcoString => Self::text(&text),
|
text: EcoString => Self::text(&text)?,
|
||||||
regex: Regex => Self::Regex(regex),
|
regex: Regex => Self::regex(regex)?,
|
||||||
location: Location => Self::Location(location),
|
location: Location => Self::Location(location),
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -25,6 +25,19 @@ AA (8)
|
|||||||
|
|
||||||
Treeworld, the World of worlds, is a world.
|
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.
|
// This is a fun one.
|
||||||
#set par(justify: true)
|
#set par(justify: true)
|
||||||
|
Loading…
x
Reference in New Issue
Block a user