Skip to content

Fix invalid Atom feeds when using emoji, horizontal rules, or images

This is a fix for issues #880 (closed), #723 (closed), #1113 (closed).

Markdown must be rendered to XHTML, not HTML, when generating summary content for Atom feeds. Otherwise, content-less tags like img and hr are not terminated and make the Atom XML invalid. Such tags are generated when issue descriptions, merge request descriptions, comments, or commit messages use emoji, horizontal rules, or images.

To pass this option through from the relevant Haml templates to the proper place in the gfm() method, a new method gfm_with_options() is introduced. It reuses the options dictionary passed to markdown() and interprets options xhtml and parse_tasks from it (the latter was a convenient replacement for gfm_with_tasks()). xhtml is already interpreted by Redcarpet::Render::HTML, but that alone was not sufficient, because the post-processing in gfm() would convert its XHTML tags back to HTML.

I found no way of passing additional optional options to the existing gfm() method without requiring updates to existing callers and without getting in the way of the existing optional arguments, but maybe someone who knows more about Ruby than I can think of one.

Thorough review appreciated since this is the first time I have used Ruby.

Merge request reports