From f3268473d9283f08404a47d7604a980bdf6243bf Mon Sep 17 00:00:00 2001 From: Nimish Gupta Date: Fri, 23 May 2014 22:13:33 -0400 Subject: [PATCH] Issue [SI-4824](https://issues.scala-lang.org/browse/SI-4824). Fixes stack overflow bug when parsing long multiline comments --- .../combinator/lexical/StdLexical.scala | 6 ++-- .../combinator/PackratParsersTest.scala | 30 +++++++++++++++++++ 2 files changed, 33 insertions(+), 3 deletions(-) diff --git a/src/main/scala/scala/util/parsing/combinator/lexical/StdLexical.scala b/src/main/scala/scala/util/parsing/combinator/lexical/StdLexical.scala index 32d7502c..328db5b2 100644 --- a/src/main/scala/scala/util/parsing/combinator/lexical/StdLexical.scala +++ b/src/main/scala/scala/util/parsing/combinator/lexical/StdLexical.scala @@ -59,9 +59,9 @@ class StdLexical extends Lexical with StdTokens { ) protected def comment: Parser[Any] = ( - '*' ~ '/' ^^ { case _ => ' ' } - | chrExcept(EofCh) ~ comment - ) + rep (chrExcept (EofCh, '*')) ~ '*' ~ '/' ^^ { case _ => ' ' } + | rep (chrExcept (EofCh, '*')) ~ '*' ~ comment ^^ { case _ => ' ' } + ) /** The set of reserved identifiers: these will be returned as `Keyword`s. */ val reserved = new mutable.HashSet[String] diff --git a/src/test/scala/scala/util/parsing/combinator/PackratParsersTest.scala b/src/test/scala/scala/util/parsing/combinator/PackratParsersTest.scala index e63acd0e..5a7e6d2e 100644 --- a/src/test/scala/scala/util/parsing/combinator/PackratParsersTest.scala +++ b/src/test/scala/scala/util/parsing/combinator/PackratParsersTest.scala @@ -30,6 +30,36 @@ class PackratParsersTest { check(4, "8/2") check(37, "4*9-0/7+9-8*1") check(9, "(1+2)*3") + check(3, """/* This is a + long long long long long + long long long long long + long long long long long + long long long long long + long long long long long + long long long long long + long long long long long + long long long long long + long long long long long + long long long long long + long long long long long + long long long long long + long long long long long + long long long long long + long long long long long + long long long long long + long long long long long + long long long long long + long long long long long + long long long long long + long long long long long + long long long long long + long long long long long + long long long long long + long long long long long + long long long long long + long long long long long + comment */ + 1+2""") } @Test