プロジェクト

全般

プロフィール

Vote #79587

完了

\f or \v character in Textile markup may cause RegexpError exception

Admin Redmine さんが約2年前に追加. 約2年前に更新.

ステータス:
Closed
優先度:
通常
担当者:
-
カテゴリ:
Text formatting_26
対象バージョン:
開始日:
2022/05/09
期日:
進捗率:

0%

予定工数:
category_id:
26
version_id:
143
issue_org_id:
29756
author_id:
106694
assigned_to_id:
332
comments:
16
status_id:
5
tracker_id:
1
plus1:
0
affected_version:
closed_on:
affected_version_id:
134
ステータス-->[Closed]

説明

When I make a new issue which includes some control codes, Redmine goes internal error but the issue is created.
Then I go back to the previous view and refer the issue, Redmine goes internal error again.

I tested some cases and found that in the NG case, the text starts with 0x20 0x0B.
If it starts with only 0x0B, the problem doesn't occur.

  • NG case

    ADDRESS  +0 +1 +2 +3 +4 +5 +6 +7  +8 +9 +A +B +C +D +E +F  0123456789ABCDEF
    ----------+-------------------------------------------------------------------
    00000000: 20 0B 61 62 63 64 65 31  32 33 34 35 20 -- -- --   .abcde12345    
    
  • OK case

    ADDRESS  +0 +1 +2 +3 +4 +5 +6 +7  +8 +9 +A +B +C +D +E +F  0123456789ABCDEF
    ----------+-------------------------------------------------------------------
    00000000: 0B 61 62 63 64 65 31 32  33 34 35 20 -- -- -- --  .abcde12345     
    

Even if the text contains the control codes, redmine should not goes internal error, I think.

In order to reproduce the defect, please use the attached file.
Open it in the text editor and paste it in the description of the new issue in Redmine.


journals

Could you provide your environment information that you can see on /admin/info page? It is even better if you provide errors in production.log.
--------------------------------------------------------------------------------
Confirmed the problem. You can create an issue but you will see Internal Server Error when accessing issues#show page.

<pre>
Processing by IssuesController#show as HTML
Parameters: {"id"=>"20368"}
Current user: admin (id=1)
Rendered issues/_action_menu.html.erb (4.8ms)
Rendered issues/show.html.erb within layouts/base (2326.0ms)
Completed 500 Internal Server Error in 2394ms (ActiveRecord: 52.4ms)

ActionView::Template::Error (too big number for repeat range: /^ {100001}\S/):
85:
86: <p><strong><%=l(:field_description)%></strong></p>
87: <div class="wiki">
88: <%= textilizable @issue, :description, :attachments => @issue.attachments %>
89: </div>
90: </div>
91: <% end %>
lib/redmine/wiki_formatting/textile/redcloth3.rb:1037:in `flush_left'
lib/redmine/wiki_formatting/textile/redcloth3.rb:1031:in `clean_white_space'
lib/redmine/wiki_formatting/textile/redcloth3.rb:293:in `to_html'
lib/redmine/wiki_formatting/textile/formatter.rb:43:in `to_html'
lib/redmine/wiki_formatting.rb:89:in `to_html'
app/helpers/application_helper.rb:656:in `textilizable'
app/views/issues/show.html.erb:88:in `_app_views_issues_show_html_erb__2452628678795344758_70339042017100'
app/controllers/issues_controller.rb:106:in `block (2 levels) in show'
app/controllers/issues_controller.rb:99:in `show'
lib/redmine/sudo_mode.rb:63:in `sudo_mode'
</pre>
--------------------------------------------------------------------------------
The issue is reproducible when the text formatting setting is Textile. No problem if the setting is Markdown.
--------------------------------------------------------------------------------
Here is a workaround.

<pre><code class="diff">
Index: lib/redmine/wiki_formatting/textile/redcloth3.rb
===================================================================
--- lib/redmine/wiki_formatting/textile/redcloth3.rb (revision 17592)
+++ lib/redmine/wiki_formatting/textile/redcloth3.rb (working copy)
@@ -1034,7 +1034,7 @@
def flush_left( text )
indt = 0
if text =~ /^ /
- while text !~ /^ {#{indt}}\S/
+ while text !~ /^ {#{indt}}[^ ]/
indt += 1
end unless text.empty?
if indt.nonzero?
</code></pre>

If the string variable @text@ start with @" \x0b"@, the @while@ loop never ends until some error occurs. It is the cause of the error. The regexp @/^ {1}\S/@ does not match the string @" \x0b"@ because "\x0b" is considered as white-space. In other words, @/\S/@ matches @"\x0b"@ because @"\x0b"@ is a kind of white-space.

Maybe the regular expression @/^ {#{indt}}\S/@ is expected to match preceeding space characters and a character other than space char, so it may be expected to match @" \x0b"@ too. But @\S@ does not match @"\x0b"@. It matches not only space character but @[^ \t\r\n\f\v]@. @"\v"@ is another expression of @"\x0b"@.
--------------------------------------------------------------------------------
Does anyone understand why the implementation of @flush_left@ method is so complicated? I think we can make it simpler like the following:

<pre><code class="diff">
Index: lib/redmine/wiki_formatting/textile/redcloth3.rb
===================================================================
--- lib/redmine/wiki_formatting/textile/redcloth3.rb (revision 17592)
+++ lib/redmine/wiki_formatting/textile/redcloth3.rb (working copy)
@@ -1032,15 +1032,7 @@
end

def flush_left( text )
- indt = 0
- if text =~ /^ /
- while text !~ /^ {#{indt}}\S/
- indt += 1
- end unless text.empty?
- if indt.nonzero?
- text.gsub!( /^ {#{indt}}/, '' )
- end
- end
+ text.sub!(/^ +/, '')
end

def footnote_ref( text )
</code></pre>
--------------------------------------------------------------------------------
Maeda-san

Thank you for the consideration.
That's exactly the same as my problem. The log looks same as mine.
I will try the suggested workaround. Thank you.

I put my environment info for future reference.

<pre>
Environment:
Redmine version 3.4.4.stable.17236
Ruby version 2.4.3-p205 (2017-12-14) [x86_64-linux]
Rails version 4.2.8
Environment production
Database adapter Mysql2
SCM:
Subversion 1.7.14
Git 1.8.3.1
Filesystem
Redmine plugins:
clipboard_image_paste 1.12
recurring_tasks 2.0.0-pre
redmine_banner 0.1.2
redmine_comment_only 0.0.1
redmine_enter_cancel 0.0.2
redmine_export_with_journals 0.0.8
redmine_issue_templates 0.1.8
redmine_knowledgebase 3.3.1
redmine_pivot_table 0.0.5
redmine_wiki_lists 0.0.9
redmine_wiki_unc 0.0.3
sidebar_hide 0.0.8
view_customize 1.1.4
</pre>

--------------------------------------------------------------------------------
Opps, the cases should be reversed in the description.

* NG case
<pre>
ADDRESS +0 +1 +2 +3 +4 +5 +6 +7 +8 +9 +A +B +C +D +E +F 0123456789ABCDEF
----------+-------------------------------------------------------------------
00000000: 0B 61 62 63 64 65 31 32 33 34 35 20 -- -- -- -- .abcde12345
</pre>

* OK case
<pre>
ADDRESS +0 +1 +2 +3 +4 +5 +6 +7 +8 +9 +A +B +C +D +E +F 0123456789ABCDEF
----------+-------------------------------------------------------------------
00000000: 20 0B 61 62 63 64 65 31 32 33 34 35 20 -- -- -- .abcde12345
</pre>

--------------------------------------------------------------------------------

--------------------------------------------------------------------------------
Here is a patch. Added a test to the code in #29756#note-4.
--------------------------------------------------------------------------------

--------------------------------------------------------------------------------
Hide MATSUTANI wrote:
> Opps, the cases should be reversed in the description.

No, cases in the description field are correct. 0x20 and 0x0b at the beginning of a line cause the exception.
--------------------------------------------------------------------------------
Go MAEDA wrote:
> Hide MATSUTANI wrote:
> > Opps, the cases should be reversed in the description.
>
> No, cases in the description field are correct. 0x20 and 0x0b at the beginning of a line cause the exception.

Maeda-san

Sorry, I was confused.
Thank you for preparing patch.

--------------------------------------------------------------------------------

--------------------------------------------------------------------------------

--------------------------------------------------------------------------------
Committed.
--------------------------------------------------------------------------------

--------------------------------------------------------------------------------


related_issues

relates,Closed,32971,New line between list items break a list

Admin Redmine さんが約2年前に更新

  • カテゴリText formatting_26 にセット
  • 対象バージョン3.4.7_143 にセット

他の形式にエクスポート: Atom PDF

いいね!0
いいね!0