Skip to content

vector_graphics_compiler stack overflow with circular references #186814

Description

@jtmcdole

What package does this bug report belong to?

vector_graphics

What target platforms are you seeing this bug on?

Android

Have you already upgraded your packages?

Yes

Dependency versions

No response

Steps to reproduce

Calling parse(svg) where svg contains a circular reference leads to a stack overflow.

const svg = '''
<svg viewBox="0 0 100 100">
  <mask id="mask1">
    <g mask="url(#mask1)">
      <rect width="100" height="100" fill="white"/>
    </g>
  </mask>
  <rect width="100" height="100" fill="blue" mask="url(#mask1)"/>
</svg>
''';

Expected results

No stack overflow

Actual results

Stack overflow

Code sample

already provided.

Screenshots or Videos

n/a

Logs

Logs
[ERROR:flutter/runtime/dart_vm_initializer.cc(40)] Unhandled Exception: Stack Overflow
#0      WhereIterator.moveNext (dart:_internal/iterable.dart:466:3)
#1      MapBase.addEntries (dart:collection/maps.dart:89:23)
#2      SvgAttributes.applyParent (package:vector_graphics_compiler/src/svg/parser.dart:2069:10)
#3      ResolvingVisitor.visitParentNode (package:vector_graphics_compiler/src/svg/resolver.dart:69:18)
#4      ResolvingVisitor.visitMaskNode (package:vector_graphics_compiler/src/svg/resolver.dart:44:39)
#5      ResolvingVisitor.visitParentNode (package:vector_graphics_compiler/src/svg/resolver.dart:70:18)
#6      ResolvingVisitor.visitMaskNode (package:vector_graphics_compiler/src/svg/resolver.dart:46:36)
#7      ResolvingVisitor.visitParentNode (package:vector_graphics_compiler/src/svg/resolver.dart:70:18)
#8      ResolvingVisitor.visitMaskNode (package:vector_graphics_compiler/src/svg/resolver.dart:46:36)
#9      ResolvingVisitor.visitParentNode (package:vector_graphics_compiler/src/svg/resolver.dart:70:18)
#10     ResolvingVisitor.visitMaskNode (package:vector_graphics_compiler/src/svg/resolver.dart:46:36)
#11     ResolvingVisitor.visitParentNode (package:vector_graphics_compiler/src/svg/resolver.dart:70:18)
#12     ResolvingVisitor.visitMaskNode (package:vector_graphics_compiler/src/svg/resolver.dart:46:36)
#13     ResolvingVisitor.visitParentNode (package:vector_graphics_compiler/src/svg/resolver.dart:70:18)
#14     ResolvingVisitor.visitMaskNode (package:vector_graphics_compiler/src/svg/resolver.dart:46:36)
#15     ResolvingVisitor.visitParentNode (package:vector_graphics_compiler/src/svg/resolver.dart:70:18)
#16     ResolvingVisitor.visitMaskNode (package:vector_graphics_compiler/src/svg/resolver.dart:46:36)
#17     ResolvingVisitor.visitParentNode (package:vector_graphics_compiler/src/svg/resolver.dart:70:18)
#18     ResolvingVisitor.visitMaskNode (package:vector_graphics_compiler/src/svg/resolver.dart:46:36)
#19     ResolvingVisitor.visitParentNode (package:vector_graphics_compiler/src/svg/resolver.dart:70:18)
#20     ResolvingVisitor.visitMaskNode (package:vector_graphics_compiler/src/svg/resolver.dart:46:36)
#21     ResolvingVisitor.visitParentNode (package:vector_graphics_compiler/src/svg/resolver.dart:70:18)
#22     ResolvingVisitor.visitMaskNode (package:vector_graphics_compiler/src/svg/resolver.dart:46:36)
#23     ResolvingVisitor.visitParentNode (package:vector_graphics_compiler/src/svg/resolver.dart:70:18)
#24     ResolvingVisitor.visitMaskNode (package:vector_graphics_compiler/src/svg/resolver.dart:46:36)
#25     ResolvingVisitor.visitParentNode (package:vector_graphics_compiler/src/svg/resolver.dart:70:18)
#26     ResolvingVisitor.visitMaskNode (package:vector_graphics_compiler/src/svg/resolver.dart:46:36)
#27     ResolvingVisitor.visitParentNode (package:vector_graphics_compiler/src/svg/resolver.dart:70:18)
#28     ResolvingVisitor.visitMaskNode (package:vector_graphics_compiler/src/svg/resolver.dart:46:36)
#29     ResolvingVisitor.visitParentNode (package:vector_graphics_compiler/src/svg/resolver.dart:70:18)
#30     ResolvingVisitor.visitMaskNode (package:vector_graphics_compiler/src/svg/resolver.dart:46:36)
#31     ResolvingVisitor.visitParentNode (package:vector_graphics_compiler/src/svg/resolver.dart:70:18)
#32     ResolvingVisitor.visitMaskNode (package:vector_graphics_compiler/src/svg/resolver.dart:46:36)
#33     ResolvingVisitor.visitParentNode (package:vector_graphics_compiler/src/svg/resolver.dart:70:18)
#34     ResolvingVisitor.visitMaskNode (package:vector_graphics_compiler/src/svg/resolver.dart:46:36)
#35     ResolvingVisitor.visitParentNode (package:vector_graphics_compiler/src/svg/resolver.dart:70:18)
#36     ResolvingVisitor.visitMaskNode (package:vector_graphics_compiler/src/svg/resolver.dart:46:36)
#37     ResolvingVisitor.visitParentNode (package:vector_graphics_compiler/src/svg/resolver.dart:70:18)
#38     ResolvingVisitor.visitMaskNode (package:vector_graphics_compiler/src/svg/resolver.dart:46:36)
#39     ResolvingVisitor.visitParentNode (package:vector_graphics_compiler/src/svg/resolver.dart:70:18)
#40     ResolvingVisitor.visitMaskNode (package:vector_graphics_compiler/src/svg/resolver.dart:46:36)
#41     ResolvingVisitor.visitParentNode (package:vector_graphics_compiler/src/svg/resolver.dart:70:18)
#42     ResolvingVisitor.visitMaskNode (package:vector_graphics_compiler/src/svg/resolver.dart:46:36)
#43     ResolvingVisitor.visitParentNode (package:vector_graphics_compiler/src/svg/resolver.dart:70:18)
...
...
#53795  MaskNode.accept (package:vector_graphics_compiler/src/svg/node.dart:392:20)
#53796  ResolvingVisitor.visitParentNode (package:vector_graphics_compiler/src/svg/resolver.dart:70:18)
#53797  ParentNode.accept (package:vector_graphics_compiler/src/svg/node.dart:234:20)
#53798  ResolvingVisitor.visitMaskNode (package:vector_graphics_compiler/src/svg/resolver.dart:46:36)
#53799  MaskNode.accept (package:vector_graphics_compiler/src/svg/node.dart:392:20)
#53800  ResolvingVisitor.visitParentNode (package:vector_graphics_compiler/src/svg/resolver.dart:70:18)
#53801  ParentNode.accept (package:vector_graphics_compiler/src/svg/node.dart:234:20)
#53802  ResolvingVisitor.visitMaskNode (package:vector_graphics_compiler/src/svg/resolver.dart:46:36)
#53803  MaskNode.accept (package:vector_graphics_compiler/src/svg/node.dart:392:20)
#53804  ResolvingVisitor.visitParentNode (package:vector_graphics_compiler/src/svg/resolver.dart:70:18)
#53805  ParentNode.accept (package:vector_graphics_compiler/src/svg/node.dart:234:20)
#53806  ResolvingVisitor.visitMaskNode (package:vector_graphics_compiler/src/svg/resolver.dart:46:36)
#53807  MaskNode.accept (package:vector_graphics_compiler/src/svg/node.dart:392:20)
#53808  ResolvingVisitor.visitParentNode (package:vector_graphics_compiler/src/svg/resolver.dart:70:18)
#53809  ParentNode.accept (package:vector_graphics_compiler/src/svg/node.dart:234:20)
#53810  ResolvingVisitor.visitMaskNode (package:vector_graphics_compiler/src/svg/resolver.dart:46:36)
#53811  MaskNode.accept (package:vector_graphics_compiler/src/svg/node.dart:392:20)
#53812  ResolvingVisitor.visitParentNode (package:vector_graphics_compiler/src/svg/resolver.dart:70:18)
#53813  ParentNode.accept (package:vector_graphics_compiler/src/svg/node.dart:234:20)
#53814  ResolvingVisitor.visitMaskNode (package:vector_graphics_compiler/src/svg/resolver.dart:46:36)
#53815  MaskNode.accept (package:vector_graphics_compiler/src/svg/node.dart:392:20)
#53816  ResolvingVisitor.visitParentNode (package:vector_graphics_compiler/src/svg/resolver.dart:70:18)
#53817  ParentNode.accept (package:vector_graphics_compiler/src/svg/node.dart:234:20)
#53818  ResolvingVisitor.visitMaskNode (package:vector_graphics_compiler/src/svg/resolver.dart:46:36)
#53819  MaskNode.accept (package:vector_graphics_compiler/src/svg/node.dart:392:20)
#53820  ResolvingVisitor.visitParentNode (package:vector_graphics_compiler/src/svg/resolver.dart:70:18)
#53821  ParentNode.accept (package:vector_graphics_compiler/src/svg/node.dart:234:20)
#53822  ResolvingVisitor.visitMaskNode (package:vector_graphics_compiler/src/svg/resolver.dart:46:36)
#53823  MaskNode.accept (package:vector_graphics_compiler/src/svg/node.dart:392:20)
#53824  ResolvingVisitor.visitParentNode (package:vector_graphics_compiler/src/svg/resolver.dart:70:18)
#53825  ParentNode.accept (package:vector_graphics_compiler/src/svg/node.dart:234:20)
#53826  ResolvingVisitor.visitMaskNode (package:vector_graphics_compiler/src/svg/resolver.dart:46:36)
#53827  MaskNode.accept (package:vector_graphics_compiler/src/svg/node.dart:392:20)
#53828  ResolvingVisitor.visitViewportNode (package:vector_graphics_compiler/src/svg/resolver.dart:176:16)
#53829  ViewportNode.accept (package:vector_graphics_compiler/src/svg/node.dart:133:20)
#53830  SvgParser.parse (package:vector_graphics_compiler/src/svg/parser.dart:864:27)
#53831  parse (package:vector_graphics_compiler/vector_graphics_compiler.dart:72:17)
#53832  main (package:test_svg/main.dart:55:3)
#53833  _runMain.<anonymous closure> (dart:ui/hooks.dart:412:23)
#53834  _delayEntrypointInvocation.<anonymous closure> (dart:isolate-patch/isolate_patch.dart:313:19)
#53835  _RawReceivePort._handleMessage (dart:isolate-patch/isolate_patch.dart:192:12)

Flutter Doctor output

stable.

Metadata

Metadata

Assignees

No one assigned

    Labels

    customer: money (g3)engineflutter/engine related. See also e: labels.p: vector_graphicsThe vector_graphics package setpackageflutter/packages repository. See also p: labels.team-engineOwned by Engine team

    Type

    No type
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions