Skip to content

correct StackOverflowEerror from rendering java.nio.Path  #319

@Groostav

Description

@Groostav

the java.nio.Path interface is recursively iterable on Path. This causes a stack-overflow in ST4's representation as it is never able to find an element that isnt iterable, so it calls convertAnythingIteratableToIterator all-the-way-down.

java.nio.Path implements Iterable<java.nio.Path>,

eg:

var path = Paths.get("some/path");
Path first = path.iterator().next(); //== "some"
Path firstFirst = first.iterator().next(); //== "some"
Path firstFirstFirst = firstFirst.iterator().next(); //== "some"

and so on.

This really does not play nicely with convertAnythingIteratableToIterator: This behavior means, even if you supply a converter for java.nio.path, ST4 never identifies it as a POJO and so never asks for a renderer.


suggestions:

  • could rewrite the convertAnything to keep a stack of elements that it checks against, if it finds that asking for iterable conversions ever produces the same value => we're probably in an infinite loop => take some action
  • could try to restructure to ask if a representation exists for the object before trying to iterate over it.
  • a simple-ish fix would be to look for instances of Collection rather than Iterable; given that Iterable is used in some infinite sequences, this would likely help there too.

I'm swamped, but I need this so I could create a PR if needed. In the mean time I'm going to twiddle my thumbs for a while.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions