summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNobuyoshi Nakada <nobu@ruby-lang.org>2023-04-28 23:46:43 +0900
committergit <svn-admin@ruby-lang.org>2023-04-29 16:55:36 +0000
commit85a9fd1902e2eba7910aa7490a8f09560dff451f (patch)
treef3cafd5239c48a7033f67e5fec607865b4a648a6
parentd23964360335ad561f252cb6fe8e90df7ebee90e (diff)
downloadruby-85a9fd1902e2eba7910aa7490a8f09560dff451f.tar.gz
[ruby/rdoc] Fix polynominal backtracking
Fix https://github.com/ruby/rdoc/pull/995 https://github.com/ruby/rdoc/commit/adfa7db5b9
-rw-r--r--lib/rdoc/parser/ruby.rb2
-rw-r--r--test/rdoc/test_rdoc_parser_ruby.rb7
2 files changed, 8 insertions, 1 deletions
diff --git a/lib/rdoc/parser/ruby.rb b/lib/rdoc/parser/ruby.rb
index 0323e4de41..2c8a19f608 100644
--- a/lib/rdoc/parser/ruby.rb
+++ b/lib/rdoc/parser/ruby.rb
@@ -2134,7 +2134,7 @@ class RDoc::Parser::Ruby < RDoc::Parser
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 76fb28808c..aea923765c 100644
--- a/test/rdoc/test_rdoc_parser_ruby.rb
+++ b/test/rdoc/test_rdoc_parser_ruby.rb
@@ -3350,6 +3350,13 @@ end
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