Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
11 changes: 10 additions & 1 deletion src/md4c-html.c
Original file line number Diff line number Diff line change
Expand Up @@ -577,7 +577,16 @@ text_callback(MD_TEXTTYPE type, const MD_CHAR* text, MD_SIZE size, void* userdat
: " "));
break;
case MD_TEXT_SOFTBR: RENDER_VERBATIM(r, (r->image_nesting_level == 0 ? "\n" : " ")); break;
case MD_TEXT_HTML: render_verbatim(r, text, size); break;
case MD_TEXT_HTML: /* When inside a Markdown image label, the text falls into
* the alt="..." attribute opened by render_open_img_span().
* Raw HTML must be escaped there, exactly like normal text,
* otherwise it breaks out of the attribute. Compare the
* image_nesting_level handling in enter_span_callback(). */
if(r->image_nesting_level == 0)
render_verbatim(r, text, size);
else
render_html_escaped(r, text, size);
break;
case MD_TEXT_ENTITY: render_entity(r, text, size, render_html_escaped); break;
default: render_html_escaped(r, text, size); break;
}
Expand Down
13 changes: 13 additions & 0 deletions test/regressions.txt
Original file line number Diff line number Diff line change
Expand Up @@ -1026,4 +1026,17 @@ http://example.com>
.
<p>&lt;
http://example.com&gt;</p>
````````````````````````````````


## Raw HTML in an image label must not break out of the alt attribute

The image label is rendered into the `alt="..."` attribute, so any raw
HTML span in it has to be escaped like normal text instead of being
emitted verbatim.

```````````````````````````````` example
![<x title=" y" onerror="alert(1)">](/url)
.
<p><img src="/url" alt="&lt;x title=&quot; y&quot; onerror=&quot;alert(1)&quot;&gt;"></p>
````````````````````````````````
Loading