Defect #20420
closedauto_link in wiki_formatter fails
0%
Description
Environment:
sh: 1: darcs: not found sh: 1: hg: not found sh: 1: cvs: not found sh: 1: bzr: not found Environment: Redmine version 3.0.4.stable Ruby version 1.9.3-p448 (2013-06-27) [i686-linux] Rails version 4.2.3 Environment production Database adapter Mysql2 SCM: Subversion 1.8.10 Git 2.1.4 Filesystem Redmine plugins: redmine_ckeditor 1.1.0 redmine_contacts 4.0.1 redmine_contacts_helpdesk 3.0.0 redmine_contacts_invoices 4.0.0 redmine_finance 2.0.0
The error occures in context with the redmine_contacts and the redmine_ckeditor, but the failing code is lib/redmine/wiki_formatting.rb of the core-code.
To reproduce the error create a contact and add a note with the following content:
<p>%%[Grußformel]%% Schuttenberg,<br />
<br />
vielen Dank für die Anfrage und das nette Gespräch.<br />
<br />
Wie besprochen habe ich Ihnen eben einen Demozugang mit folgenden Zugangsdaten eingerichtet:<br />
<br />
URL: <a class="external" href="http://civihosting.systopia.de/">http://civihosting.systopia.de/</a><br />
Benutzername: XXXX<br />
Passwort: XXXXX<br />
<br />
Ich habe zusätzlich zu den Kernfunktionen wie besprochen nun zunächst folgende Module aktiviert:</p>
<ul>
<li><b>Versand und Auswertung von Mailings (z.B. Newslettern) </b></li>
<li><b>Mitgliederverwaltung </b></li>
<li><b>Spendenverwaltung</b></li>
</ul>
<p>Es gibt darüber hinaus noch einige weitere Funktionen (z.B. ein <b> Veranstaltungs- und Kampagnenmanagement</b>), die ich aber aus Gründen der Übersichtlichkeit zunächst nicht aktiviert habe - falls Sie diese auch testen wollen, sagen Sie gerne Bescheid.<br />
<br />
CiviCRM ist stark anpassungsf... "(weiter lesen)":/redmine/notes/88?project_id=systopia
This breaks the contact-view (not the view of the note) and produces the following log-message:
Started GET "/redmine/contacts/137?project_id=systopia" for 130.180.124.102 at 2015-07-27 14:53:12 +0200
Processing by ContactsController#show as HTML
Parameters: {"project_id"=>"systopia", "id"=>"137"}
Current user: thomas (id=8)
Rendered plugins/redmine_contacts/app/views/contacts_tags/_tags_form.html.erb (3.0ms)
Rendered plugins/redmine_contacts/app/views/contacts/_form_tags.html.erb (8.4ms)
Rendered attachments/_form.html.erb (2.1ms)
Rendered plugins/redmine_contacts/app/views/notes/_form.html.erb (6.7ms)
Rendered plugins/redmine_contacts/app/views/notes/_add.html.erb (8.0ms)
Rendered plugins/redmine_contacts/app/views/notes/_note_item.html.erb (20.1ms)
Rendered plugins/redmine_contacts/app/views/contacts/_notes.html.erb (134.1ms)
Rendered plugins/redmine_contacts/app/views/common/_contact_tabs.html.erb (136.6ms)
Rendered plugins/redmine_contacts/app/views/contacts/show.html.erb within layouts/base (172.3ms)
Completed 500 Internal Server Error in 211ms (ActiveRecord: 10.8ms)
ActionView::Template::Error (undefined method `[]' for nil:NilClass):
39: <% end %>
40: </div>
41: <div class="wiki note">
42: <%= note_content(note_item) %>
43: <%= auto_contacts_thumbnails(note_item) %>
44: <%= render :partial => 'attachments/links', :locals => {:attachments => note_item.attachments, :options => {}} if note_item.attachments.any? %>
45: </div>
lib/redmine/wiki_formatting.rb:125:in `block in auto_link!'
lib/redmine/wiki_formatting.rb:116:in `auto_link!'
lib/redmine/wiki_formatting.rb:71:in `to_html'
app/helpers/application_helper.rb:574:in `textilizable'
Further investigations shows, that for some html-code-snippets (like the one above - I actually was not able to determine the exact combination of tags/words/formatting-stuff that leads to the error) the following code of lib/redmine/wiki_formatting.rb breaks:
115 def auto_link!(text)
116 text.gsub!(AUTO_LINK_RE) do
117 all, leading, proto, url, post = $&, $1, $2, $3, $6
118 if leading =~ /<a\s/i || leading =~ /![<>=]?/
119 # don't replace URLs that are already linked
120 # and URLs prefixed with ! !> !< != (textile images)
121 all
122 else
123 # Idea below : an URL with unbalanced parenthesis and
124 # ending by ')' is put into external parenthesis
125 if ( url[-1]==?) and ((url.count("(") - url.count(")")) < 0 ) )
126 url=url[0..-2] # discard closing parenthesis from url
127 post = ")"+post # add closing parenthesis to post
128 end
129 content = proto + url
130 href = "#{proto=="www."?"http://www.":proto}#{url}"
131 %(#{leading}<a class="external" href="#{ERB::Util.html_escape href}">#{ERB::Util.html_escape content}</a>#{post}).html_safe
132 end
133 end
134 end
The reason is, that the variables of line 117 (all, leading, proto, url, post) are empty, which leads to an exception in line 125.
I am not a ruby-programmer - but I wonder how it could be that $& is not set when the regular expression obviously matched? Otherwise we would not enter the loop at all, do we?