From f2e6aaf9b9c3a5108b1d89d6c70a6ae93cecf690 Mon Sep 17 00:00:00 2001 From: Nick Wellnhofer Date: Sun, 23 Nov 2014 14:00:00 +0100 Subject: Fix segfault on docs without trailing newline --- api_test/main.c | 13 +++++++++++++ src/blocks.c | 2 +- 2 files changed, 14 insertions(+), 1 deletion(-) diff --git a/api_test/main.c b/api_test/main.c index 4ee3546..085d458 100644 --- a/api_test/main.c +++ b/api_test/main.c @@ -440,6 +440,18 @@ test_content(test_batch_runner *runner, cmark_node_type type, cmark_node_destroy(node); } +static void +parser(test_batch_runner *runner) +{ + static const char markdown[] = "No newline"; + cmark_node *doc = cmark_parse_document(markdown, sizeof(markdown) - 1); + char *html = cmark_render_html(doc); + STR_EQ(runner, html, "

No newline

\n", + "document without trailing newline"); + free(html); + cmark_node_destroy(doc); +} + static void render_html(test_batch_runner *runner) { @@ -479,6 +491,7 @@ int main() { node_check(runner); create_tree(runner); hierarchy(runner); + parser(runner); render_html(runner); test_print_summary(runner); diff --git a/src/blocks.c b/src/blocks.c index 2a6cdd8..c74b425 100644 --- a/src/blocks.c +++ b/src/blocks.c @@ -441,7 +441,7 @@ extern cmark_node *cmark_parse_document(const char *buffer, size_t len) while (buffer < end) { const char *eol = memchr(buffer, '\n', end - buffer); - offset = eol ? (eol - buffer) + 1 : eol - buffer; + offset = eol ? (eol - buffer) + 1 : end - buffer; cmark_process_line(parser, buffer, offset); buffer += offset; linenum++; -- cgit v1.2.3