Markdown is not rendering, "Error loading viewer": undefined method `html_escape'
As reported in https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=895871, Overview and Repository pages show "Error loading viewer" errors on projects with Markdown-formatted README.md:
Completed 500 Internal Server Error in 82ms (ActiveRecord: 3.3ms)
ActionView::Template::Error (undefined method `html_escape' for #<Banzai::Renderer::Redcarpet::HTML:0x000055aa553a6768>
Did you mean? html_safe?):
1: - blob = viewer.blob
2: - rendered_markup = blob.rendered_markup if blob.respond_to?(:rendered_markup)
3: .file-content.wiki
4: = markup(blob.name, blob.data, rendered: rendered_markup)
lib/banzai/renderer/redcarpet/html.rb:9:in `block_code'
lib/banzai/filter/markdown_engines/redcarpet.rb:27:in `render'
lib/banzai/filter/markdown_engines/redcarpet.rb:27:in `render'
lib/banzai/filter/markdown_filter.rb:12:in `call'
lib/banzai/pipeline/base_pipeline.rb:21:in `block (2 levels) in singleton class'
lib/banzai/renderer.rb:108:in `render_result'
lib/banzai/renderer.rb:139:in `block in cacheless_render'
lib/gitlab/metrics/influx_db.rb:98:in `measure'
lib/banzai/renderer.rb:138:in `cacheless_render'
lib/banzai/renderer.rb:28:in `render'
lib/banzai.rb:3:in `render'
app/helpers/markup_helper.rb:244:in `markdown_unsafe'
app/helpers/markup_helper.rb:143:in `markup_unsafe'
app/helpers/markup_helper.rb:110:in `markup'
app/views/projects/blob/viewers/_markup.html.haml:4:in `_app_views_projects_blob_viewers__markup_html_haml__1729761416022180057_47095031404280'
app/views/projects/blob/_viewer.html.haml:20:in `_app_views_projects_blob__viewer_html_haml___2248780134913313564_47095031583720'
app/controllers/application_controller.rb:252:in `view_to_html_string'
app/controllers/concerns/renders_blob.rb:18:in `blob_json'
app/controllers/projects/blob_controller.rb:200:in `show_json'
app/controllers/projects/blob_controller.rb:47:in `block (2 levels) in show'
app/controllers/projects/blob_controller.rb:39:in `show'
lib/gitlab/i18n.rb:50:in `with_locale'
lib/gitlab/i18n.rb:56:in `with_user_locale'
app/controllers/application_controller.rb:330:in `set_locale'
lib/gitlab/middleware/multipart.rb:95:in `call'
lib/gitlab/request_profiler/middleware.rb:14:in `call'
lib/gitlab/middleware/go.rb:17:in `call'
lib/gitlab/etag_caching/middleware.rb:11:in `call'
lib/gitlab/middleware/read_only/controller.rb:28:in `call'
lib/gitlab/middleware/read_only.rb:16:in `call'
lib/gitlab/request_context.rb:18:in `call'
lib/gitlab/metrics/requests_rack_middleware.rb:27:in `call'
lib/gitlab/middleware/release_env.rb:10:in `call'
The culprit is in https://gitlab.com/gitlab-org/gitlab-ce/blob/master/lib/banzai/renderer/redcarpet/html.rb#L9
The following patch fixes the problem:
--- a/lib/banzai/renderer/redcarpet/html.rb
+++ b/lib/banzai/renderer/redcarpet/html.rb
@@ -5,9 +5,9 @@
def block_code(code, lang)
lang_attr = lang ? %Q{ lang="#{lang}"} : ''
"\n<pre>" \
- "<code#{lang_attr}>#{html_escape(code)}</code>" \
+ "<code#{lang_attr}>#{ERB::Util.html_escape(code)}</code>" \
"</pre>"
end
end
end