mirror of
https://github.com/typst/typst
synced 2025-05-13 20:46:23 +08:00
Merge 254a849fec3d1f9ae95b628dad6481cfa6619df6 into 9b09146a6b5e936966ed7ee73bce9dd2df3810ae
This commit is contained in:
commit
c887a931e7
@ -655,6 +655,7 @@ fn visit_grouping_rules<'a>(
|
||||
let matching = s.rules.iter().find(|&rule| (rule.trigger)(content, &s.kind));
|
||||
|
||||
// Try to continue or finish an existing grouping.
|
||||
let mut i = 0;
|
||||
while let Some(active) = s.groupings.last() {
|
||||
// Start a nested group if a rule with higher priority matches.
|
||||
if matching.is_some_and(|rule| rule.priority > active.rule.priority) {
|
||||
@ -670,6 +671,16 @@ fn visit_grouping_rules<'a>(
|
||||
}
|
||||
|
||||
finish_innermost_grouping(s)?;
|
||||
i += 1;
|
||||
if i > 512 {
|
||||
// It seems like this case is only hit when there is a cycle between
|
||||
// a show rule and a grouping rule. The show rule produces content
|
||||
// that is matched by a grouping rule, which is then again processed
|
||||
// by the show rule, and so on. The two must be at an equilibrium,
|
||||
// otherwise either the "maximum show rule depth" or "maximum
|
||||
// grouping depth" errors are triggered.
|
||||
bail!(content.span(), "maximum grouping depth exceeded");
|
||||
}
|
||||
}
|
||||
|
||||
// Start a new grouping.
|
||||
|
@ -258,3 +258,11 @@ I am *strong*, I am _emphasized_, and I am #[special<special>].
|
||||
|
||||
= Hello
|
||||
*strong*
|
||||
|
||||
--- issue-5690-oom-par-box ---
|
||||
// Error: 3:6-5:1 maximum grouping depth exceeded
|
||||
#show par: box
|
||||
|
||||
Hello
|
||||
|
||||
World
|
||||
|
Loading…
x
Reference in New Issue
Block a user