From 85a9fd1902e2eba7910aa7490a8f09560dff451f Mon Sep 17 00:00:00 2001 From: Nobuyoshi Nakada Date: Fri, 28 Apr 2023 23:46:43 +0900 Subject: [PATCH] [ruby/rdoc] Fix polynominal backtracking Fix https://github.com/ruby/rdoc/pull/995 https://github.com/ruby/rdoc/commit/adfa7db5b9 --- lib/rdoc/parser/ruby.rb | 2 +- test/rdoc/test_rdoc_parser_ruby.rb | 7 +++++++ 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/lib/rdoc/parser/ruby.rb b/lib/rdoc/parser/ruby.rb index 0323e4de413eb8..2c8a19f6088507 100644 --- a/lib/rdoc/parser/ruby.rb +++ b/lib/rdoc/parser/ruby.rb @@ -2134,7 +2134,7 @@ def read_directive allowed if :on_nl == tk[:kind] or (:on_kw == tk[:kind] && 'def' == tk[:text]) then return elsif :on_comment == tk[:kind] or :on_embdoc == tk[:kind] then - return unless tk[:text] =~ /\s*:?([\w-]+):\s*(.*)/ + return unless tk[:text] =~ /:?\b([\w-]+):\s*(.*)/ directive = $1.downcase diff --git a/test/rdoc/test_rdoc_parser_ruby.rb b/test/rdoc/test_rdoc_parser_ruby.rb index 76fb28808c6c52..aea923765ce791 100644 --- a/test/rdoc/test_rdoc_parser_ruby.rb +++ b/test/rdoc/test_rdoc_parser_ruby.rb @@ -3350,6 +3350,13 @@ def test_read_directive_one_liner assert_equal :on_const, parser.get_tk[:kind] end + def test_read_directive_linear_performance + pre = ->(i) {util_parser '# ' + '0'*i + '=000:'} + assert_linear_performance((1..5).map{|i|10**i}, pre: pre) do |parser| + assert_nil parser.read_directive [] + end + end + def test_read_documentation_modifiers c = RDoc::Context.new