summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--api_test/main.c9
-rwxr-xr-xsrc/blocks.c4
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;