diff options
-rw-r--r-- | api_test/main.c | 9 | ||||
-rwxr-xr-x | src/blocks.c | 4 |
2 files changed, 13 insertions, 0 deletions
diff --git a/api_test/main.c b/api_test/main.c index 7c3ac1d..bcfbb6d 100644 --- a/api_test/main.c +++ b/api_test/main.c @@ -677,6 +677,7 @@ line_endings(test_batch_runner *runner) STR_EQ(runner, html, "<ul>\n<li>a</li>\n<li>b</li>\n<li>c</li>\n<li>d</li>\n</ul>\n", "list with different line endings"); free(html); + static const char crlf_lines[] = "line\r\nline\r\n"; html = cmark_markdown_to_html(crlf_lines, sizeof(crlf_lines) - 1, @@ -684,6 +685,14 @@ line_endings(test_batch_runner *runner) STR_EQ(runner, html, "<p>line<br />\nline</p>\n", "crlf endings with CMARK_OPT_HARDBREAKS"); free(html); + + static const char no_line_ending[] = "```\nline\n```"; + html = cmark_markdown_to_html(no_line_ending, + sizeof(no_line_ending) - 1, + CMARK_OPT_DEFAULT); + STR_EQ(runner, html, "<pre><code>line\n</code></pre>\n", + "fenced code block with no final newline"); + free(html); } static void diff --git a/src/blocks.c b/src/blocks.c index f1e3a7a..4432f78 100755 --- a/src/blocks.c +++ b/src/blocks.c @@ -598,6 +598,10 @@ static void S_process_line(cmark_parser *parser, const unsigned char *buffer, } else { cmark_strbuf_put(parser->curline, buffer, bytes); } + // ensure line ends with a newline: + if (!S_is_line_end_char(parser->curline->ptr[bytes - 1])) { + cmark_strbuf_putc(parser->curline, '\n'); + } parser->offset = 0; parser->column = 0; parser->blank = false; |