sirthias / pegdown

A pure-Java Markdown processor based on a parboiled PEG parser supporting a number of extensions
http://pegdown.org
Apache License 2.0
1.29k stars 217 forks source link

org.pegdown.ParsingTimeoutException #136

Closed yegor256 closed 10 years ago

yegor256 commented 10 years ago

I'm getting this exception sometimes (!) for different Markdown texts:

org.parboiled.errors.ParserRuntimeException:  Error while parsing action 'Root/Sequence/ZeroOrMore/Sequence/Block/FirstOf/Para/Sequence/Inlines/Sequence/ZeroOrMore/Sequence/InlineOrIntermediateEndline/Sequence/Inline/Inline_Action1' at input position (line 1, pos 232): [.. here my text goes ..]
org.pegdown.ParsingTimeoutException   
    at org.parboiled.MatcherContext.runMatcher(MatcherContext.java:366)
    at org.parboiled.matchers.SequenceMatcher.match(SequenceMatcher.java:46
    at org.parboiled.matchers.MemoMismatchesMatcher.match(MemoMismatchesMatcher.java:41
    at org.parboiled.parserunners.BasicParseRunner.match(BasicParseRunner.java:77
    at org.parboiled.MatcherContext.runMatcher(MatcherContext.java:351)
    at org.parboiled.matchers.SequenceMatcher.match(SequenceMatcher.java:46
    at org.parboiled.parserunners.BasicParseRunner.match(BasicParseRunner.java:77
    at org.parboiled.MatcherContext.runMatcher(MatcherContext.java:351)
    at org.parboiled.matchers.FirstOfMatcher.match(FirstOfMatcher.java:41
    at org.parboiled.parserunners.BasicParseRunner.match(BasicParseRunner.java:77
    at org.parboiled.MatcherContext.runMatcher(MatcherContext.java:  351)
    at org.parboiled.matchers.SequenceMatcher.match(SequenceMatcher.java:46
    at org.parboiled.parserunners.BasicParseRunner.match(BasicParseRunner.java:77
    at org.parboiled.MatcherContext.runMatcher(MatcherContext.java:351)
    at org.parboiled.matchers.ZeroOrMoreMatcher.match(ZeroOrMoreMatcher.java:39
    at org.parboiled.parserunners.BasicParseRunner.match(BasicParseRunner.java:77
    at org.parboiled.MatcherContext.runMatcher(MatcherContext.java:351)
    at org.parboiled.matchers.SequenceMatcher.match(SequenceMatcher.java:46
    at org.parboiled.parserunners.BasicParseRunner.match(BasicParseRunner.java:77
    at org.parboiled.MatcherContext.runMatcher(MatcherContext.java:351)
    at org.parboiled.matchers.SequenceMatcher.match(SequenceMatcher.java:46
    at org.parboiled.parserunners.BasicParseRunner.match(BasicParseRunner.java:  77)
    at org.parboiled.MatcherContext.runMatcher(MatcherContext.java:351)
    at org.parboiled.matchers.SequenceMatcher.match(SequenceMatcher.java:46
    at org.parboiled.parserunners.BasicParseRunner.match(BasicParseRunner.java:77
    at org.parboiled.MatcherContext.runMatcher(MatcherContext.java:351)
    at org.parboiled.matchers.SequenceMatcher.match(SequenceMatcher.java:46
    at org.parboiled.parserunners.BasicParseRunner.match(BasicParseRunner.java:77
    at org.parboiled.MatcherContext.runMatcher(MatcherContext.java:351)
    at org.parboiled.matchers.FirstOfMatcher.match(FirstOfMatcher.java:41
    at org.parboiled.parserunners.BasicParseRunner.match(BasicParseRunner.java:77
    at org.parboiled.MatcherContext.runMatcher(MatcherContext.java:351)
    at org.parboiled.matchers.SequenceMatcher.match(SequenceMatcher.java:46
    at org.parboiled.parserunners.BasicParseRunner.match(BasicParseRunner.java:  77)   
    at org.parboiled.MatcherContext.runMatcher(MatcherContext.java:351)
    at org.parboiled.matchers.SequenceMatcher.match(SequenceMatcher.java:46
    at org.parboiled.parserunners.BasicParseRunner.match(BasicParseRunner.java:77
    at org.parboiled.MatcherContext.runMatcher(MatcherContext.java:351)
    at org.parboiled.matchers.ZeroOrMoreMatcher.match(ZeroOrMoreMatcher.java:39
    at org.parboiled.parserunners.BasicParseRunner.match(BasicParseRunner.java:77
    at org.parboiled.MatcherContext.runMatcher(MatcherContext.java:351)
    at org.parboiled.matchers.SequenceMatcher.match(SequenceMatcher.java:46
    at org.parboiled.parserunners.BasicParseRunner.match(BasicParseRunner.java:77
    at org.parboiled.MatcherContext.runMatcher(MatcherContext.java:351)
    at org.parboiled.matchers.SequenceMatcher.match(SequenceMatcher.java:  46
    at org.parboiled.parserunners.BasicParseRunner.match(BasicParseRunner.java:77
    at org.parboiled.MatcherContext.runMatcher(MatcherContext.java:351)
    at org.parboiled.parserunners.BasicParseRunner.run(BasicParseRunner.java:72
    at org.parboiled.parserunners.ReportingParseRunner.runBasicMatch(ReportingParseRunner.java:86
    at org.parboiled.parserunners.ReportingParseRunner.run(ReportingParseRunner.java:66
    at org.parboiled.parserunners.AbstractParseRunner.run(AbstractParseRunner.java:81
    at org.pegdown.Parser.parseToParsingResult(Parser.java:1495
    at org.pegdown.Parser.parseInternal(Parser.java:1482)   at org.pegdown.Parser.parse(Parser.java:85)
    at org.pegdown.PegDownProcessor.parseMarkdown(PegDownProcessor.java:171
    at org.pegdown.PegDownProcessor.markdownToHtml(PegDownProcessor.java:156)   
    at org.pegdown.PegDownProcessor.markdownToHtml(PegDownProcessor.java:  151)   
    at org.pegdown.PegDownProcessor.markdownToHtml(PegDownProcessor.java:139)   
    at org.pegdown.PegDownProcessor.markdownToHtml(PegDownProcessor.java:112)   

I'm using version 1.4.2.

sirthias commented 10 years ago

This is expected behavior. Sometimes, for pathological input, the parser is not able to complete the parsing run in the configured timeout period. Then you get this error.