Project

General

Profile

Actions

Bug #21114

closed

Prism hangs up while parsing deeply nested `def`

Added by tompng (tomoya ishida) 17 days ago. Updated 9 days ago.

Status:
Closed
Assignee:
Target version:
-
ruby -v:
ruby 3.5.0dev (2025-02-05T08:15:30Z master 141f2924ee) +PRISM [x86_64-linux]
[ruby-core:120882]

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.

Actions

Also available in: Atom PDF

Like0
Like0Like0Like0Like0Like0