diff --git a/render/src/shape_utils.rs b/render/src/shape_utils.rs index d22dfbb684f2..92c8065a33c3 100644 --- a/render/src/shape_utils.rs +++ b/render/src/shape_utils.rs @@ -312,11 +312,17 @@ impl PendingPath { other.points.extend_from_slice(&new_segment.points[1..]); new_segment = self.segments.swap_remove(i); start_open = false; + // Restart from the beginning; the merged segment may now connect + // to a segment at an earlier index for the end match. + i = 0; } else if end_open && new_segment.end() == other.start() { std::mem::swap(&mut other.points, &mut new_segment.points); other.points.extend_from_slice(&new_segment.points[1..]); new_segment = self.segments.swap_remove(i); end_open = false; + // Restart from the beginning; the merged segment may now connect + // to a segment at an earlier index for the start match. + i = 0; } else { i += 1; } @@ -542,6 +548,10 @@ impl<'a> ShapeConverter<'a> { for (i, path) in self.fills.iter_mut().enumerate() { // These invariants are checked above (any invalid/empty fill ID should not have been added). debug_assert!(i < self.fill_styles.len()); + + // Fills must be closed loops. Flash ignores any unclosed fill paths. + path.segments.retain(PathSegment::is_closed); + if path.segments.is_empty() { continue; } diff --git a/tests/tests/swfs/avm1/issue_5614/output.expected.png b/tests/tests/swfs/avm1/issue_5614/output.expected.png new file mode 100644 index 000000000000..20a3a69fae13 Binary files /dev/null and b/tests/tests/swfs/avm1/issue_5614/output.expected.png differ diff --git a/tests/tests/swfs/avm1/issue_5614/output.txt b/tests/tests/swfs/avm1/issue_5614/output.txt new file mode 100644 index 000000000000..e69de29bb2d1 diff --git a/tests/tests/swfs/avm1/issue_5614/test.swf b/tests/tests/swfs/avm1/issue_5614/test.swf new file mode 100644 index 000000000000..d24f4bbae388 Binary files /dev/null and b/tests/tests/swfs/avm1/issue_5614/test.swf differ diff --git a/tests/tests/swfs/avm1/issue_5614/test.toml b/tests/tests/swfs/avm1/issue_5614/test.toml new file mode 100644 index 000000000000..9b0a7b757088 --- /dev/null +++ b/tests/tests/swfs/avm1/issue_5614/test.toml @@ -0,0 +1,4 @@ +num_frames = 1 + +[player_options] +with_renderer = { optional = false, quality = "low" }