Skip to content

Limit the recursion depth on token graph for preventing StackOverflow #12359

@jainankitk

Description

@jainankitk

Description

For one of the customer workloads, saw the below error:

[2023-06-01T14:06:36,722][ERROR][o.e.b.ElasticsearchUncaughtExceptionHandler] [3d0cd173f993f66856fa05a22232a18f] fatal error in thread [elasticsearch[3d0cd173f993f66856fa05a22232a18f][search][T#12]], exiting
java.lang.StackOverflowError
    at org.apache.lucene.util.graph.GraphTokenStreamFiniteStrings.articulationPointsRecurse(GraphTokenStreamFiniteStrings.java:277)
    at org.apache.lucene.util.graph.GraphTokenStreamFiniteStrings.articulationPointsRecurse(GraphTokenStreamFiniteStrings.java:277)
    at org.apache.lucene.util.graph.GraphTokenStreamFiniteStrings.articulationPointsRecurse(GraphTokenStreamFiniteStrings.java:277)
    at org.apache.lucene.util.graph.GraphTokenStreamFiniteStrings.articulationPointsRecurse(GraphTokenStreamFiniteStrings.java:277)
    at org.apache.lucene.util.graph.GraphTokenStreamFiniteStrings.articulationPointsRecurse(GraphTokenStreamFiniteStrings.java:277)
    at org.apache.lucene.util.graph.GraphTokenStreamFiniteStrings.articulationPointsRecurse(GraphTokenStreamFiniteStrings.java:277)
    at org.apache.lucene.util.graph.GraphTokenStreamFiniteStrings.articulationPointsRecurse(GraphTokenStreamFiniteStrings.java:277)
    at org.apache.lucene.util.graph.GraphTokenStreamFiniteStrings.articulationPointsRecurse(GraphTokenStreamFiniteStrings.java:277)
    at org.apache.lucene.util.graph.GraphTokenStreamFiniteStrings.articulationPointsRecurse(GraphTokenStreamFiniteStrings.java:277)
    at org.apache.lucene.util.graph.GraphTokenStreamFiniteStrings.articulationPointsRecurse(GraphTokenStreamFiniteStrings.java:277)

Although the customer acknowledged state explosion due to their malformed regex query, wondering if we should prevent the process from crashing by limiting the recursion depth?

Don't think there is much point writing this iteratively using stack, as we might run of heap memory still

Version and environment details

Lucene version - 8.7.0 with Elasticsearch 7.10.2

Metadata

Metadata

Assignees

No one assigned

    Labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions