You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@lucene.apache.org by "Kartik Ganesh (Jira)" <ji...@apache.org> on 2022/04/05 22:09:00 UTC

[jira] [Updated] (LUCENE-10501) StackOverflow when RegExp encounters a very large string

     [ https://issues.apache.org/jira/browse/LUCENE-10501?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]

Kartik Ganesh updated LUCENE-10501:
-----------------------------------
    Description: 
When RegExp encounters a very large string, it hits a Stack Overflow exception when parsing it.

Simple program to repro:
{noformat}
$ ls
RegExpTest.java       lucene-core-9.1.0.jar
$ cat RegExpTest.java
class RegExpTest {
    public static void main(String[] args) {
        StringBuilder strBuilder = new StringBuilder();
        for (int i = 0; i < 50000; i++) {
            strBuilder.append("a");
        }
        try {
            new org.apache.lucene.util.automaton.RegExp(strBuilder.toString());
        } catch (StackOverflowError e) {
            System.out.println("Stack overflow");
            System.exit(-1);
        }
        System.out.println("Success");
    }
}
$ javac -cp './lucene-core-9.1.0.jar:.' RegExpTest.java
$ java -cp './lucene-core-9.1.0.jar:.' RegExpTest
Stack overflow
$ java -Xss1G -cp './lucene-core-9.1.0.jar:.' RegExpTest
Success{noformat}
Based on https://issues.apache.org/jira/browse/LUCENE-6156 , this appears to be due to the recursive parsing implementation.

  was:
When RegExp encounters a very large string, it hits a Stack Overflow exception when parsing it.

Simple program to repro:

{{$ ls}}
{{RegExpTest.java       lucene-core-9.1.0.jar}}
{{$ cat RegExpTest.java}}
{{class RegExpTest {}}
{{    public static void main(String[] args) {}}
{{        StringBuilder strBuilder = new StringBuilder();}}
{{        for (int i = 0; i < 50000; i++) {}}
{{            strBuilder.append("a");}}
{{        }}}
{{        try {}}
{{            new org.apache.lucene.util.automaton.RegExp(strBuilder.toString());}}
{{        } catch (StackOverflowError e) {}}
{{            System.out.println("Stack overflow");}}
{{            System.exit(-1);}}
{{        }}}
{{        System.out.println("Success");}}
{{    }}}
{{}}}
{{$ javac -cp './lucene-core-9.1.0.jar:.' RegExpTest.java}}
{{$ java -cp './lucene-core-9.1.0.jar:.' RegExpTest}}
{{Stack overflow}}
{{$ java -Xss1G -cp './lucene-core-9.1.0.jar:.' RegExpTest}}
{{Success}}

Based on https://issues.apache.org/jira/browse/LUCENE-6156 , this appears to be due to the recursive parsing implementation.


> StackOverflow when RegExp encounters a very large string
> --------------------------------------------------------
>
>                 Key: LUCENE-10501
>                 URL: https://issues.apache.org/jira/browse/LUCENE-10501
>             Project: Lucene - Core
>          Issue Type: Bug
>          Components: core/queryparser
>    Affects Versions: 9.1
>            Reporter: Kartik Ganesh
>            Priority: Major
>
> When RegExp encounters a very large string, it hits a Stack Overflow exception when parsing it.
> Simple program to repro:
> {noformat}
> $ ls
> RegExpTest.java       lucene-core-9.1.0.jar
> $ cat RegExpTest.java
> class RegExpTest {
>     public static void main(String[] args) {
>         StringBuilder strBuilder = new StringBuilder();
>         for (int i = 0; i < 50000; i++) {
>             strBuilder.append("a");
>         }
>         try {
>             new org.apache.lucene.util.automaton.RegExp(strBuilder.toString());
>         } catch (StackOverflowError e) {
>             System.out.println("Stack overflow");
>             System.exit(-1);
>         }
>         System.out.println("Success");
>     }
> }
> $ javac -cp './lucene-core-9.1.0.jar:.' RegExpTest.java
> $ java -cp './lucene-core-9.1.0.jar:.' RegExpTest
> Stack overflow
> $ java -Xss1G -cp './lucene-core-9.1.0.jar:.' RegExpTest
> Success{noformat}
> Based on https://issues.apache.org/jira/browse/LUCENE-6156 , this appears to be due to the recursive parsing implementation.



--
This message was sent by Atlassian Jira
(v8.20.1#820001)

---------------------------------------------------------------------
To unsubscribe, e-mail: issues-unsubscribe@lucene.apache.org
For additional commands, e-mail: issues-help@lucene.apache.org