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