Bug #21114
closed
Prism hangs up while parsing deeply nested `def`
Description
Prism.parse "def f\n" * 500 # Ruby 3.4
Prism.parse "def f\n" * 5000 # Ruby 3.5
Prism.parse "def initialize: ()->void\n" * 250 # Ruby 3.4
Prism.parse "def initialize: ()->void\n" * 2500 # Ruby 3.5
#=> hang up, Ctrl-C doesn't work
Expect to raise ParseError with @type=:nesting_too_deep
like Prism.parse '(1+'*10000
Background¶
Runnning rdoc
in ruby/rbs
directory with Ruby 3.4, RDoc hangs up.
RDoc tries to parse the partial file content, and stops with stdlib/ripper/0/ripper.rbs
(https://github.com/ruby/rbs/blob/a7178b12b041f5b304f4076aa01efed817ba8040/stdlib/ripper/0/ripper.rbs)
Parseable checking code in RDoc https://github.com/ruby/rdoc/blob/14a7631a3775e033791f13baa3be76c94b908e3d/lib/rdoc/markup/to_html.rb#L437
def parseable? text
...
eval("BEGIN { throw :valid, true }\n#{text}")
...
end
However, RBS doesn't seem to use RDoc, so I think it's not a big problem.
Updated by hsbt (Hiroshi SHIBATA) 10 days ago
- Status changed from Open to Assigned
Updated by kddnewton (Kevin Newton) 9 days ago
Updated by kddnewton (Kevin Newton) 9 days ago
- Status changed from Assigned to Closed
Applied in changeset git|b21e1aed2ed5b22b50efc658289a403eeed581df.
[ruby/prism] Fix infinite loop in error recovery
When recovering from a depth error that occurs at the end of the
file, we need to break out of parsing statements.
Fixes [Bug #21114]
Updated by kddnewton (Kevin Newton) 9 days ago
- Backport changed from 3.1: UNKNOWN, 3.2: UNKNOWN, 3.3: UNKNOWN, 3.4: UNKNOWN to 3.1: UNKNOWN, 3.2: UNKNOWN, 3.3: UNKNOWN, 3.4: REQUIRED
Updated by k0kubun (Takashi Kokubun) 8 days ago
- Backport changed from 3.1: UNKNOWN, 3.2: UNKNOWN, 3.3: UNKNOWN, 3.4: REQUIRED to 3.1: UNKNOWN, 3.2: UNKNOWN, 3.3: UNKNOWN, 3.4: DONE
ruby_3_4 9a0984436888a59f4914c3035c53657baf62ce2b merged revision(s) b21e1aed2ed5b22b50efc658289a403eeed581df.