From 0b4779ff8aaa336402ea87929aa20f19fb8bcb07 Mon Sep 17 00:00:00 2001 From: zayeem shaikh Date: Mon, 12 Oct 2026 13:29:02 +0530 Subject: [PATCH] fix prefix truncation after empty list items in commonmark renderer --- api_test/main.c | 14 ++++++++++++++ src/commonmark.c | 7 +++++-- 2 files changed, 19 insertions(+), 2 deletions(-) diff --git a/api_test/main.c b/api_test/main.c index a4ae9251d..877d72e9f 100644 --- a/api_test/main.c +++ b/api_test/main.c @@ -759,6 +759,20 @@ static void render_commonmark(test_batch_runner *runner) { STR_EQ(runner, commonmark, "Hi", "render single inline node"); free(commonmark); + static const char empty_item[] = "> - a\n" + "> -\n" + "> - b\n"; + cmark_node *empty_item_doc = + cmark_parse_document(empty_item, sizeof(empty_item) - 1, + CMARK_OPT_DEFAULT); + commonmark = cmark_render_commonmark(empty_item_doc, CMARK_OPT_DEFAULT, 0); + STR_EQ(runner, commonmark, "> - a\n" + "> - \n" + "> - b\n", + "render empty list item inside block quote"); + free(commonmark); + + cmark_node_free(empty_item_doc); cmark_node_free(text); cmark_node_free(doc); } diff --git a/src/commonmark.c b/src/commonmark.c index 95de85251..8a2bc5184 100644 --- a/src/commonmark.c +++ b/src/commonmark.c @@ -246,8 +246,11 @@ static int S_render_node(cmark_renderer *renderer, cmark_node *node, } } } else { - cmark_strbuf_truncate(renderer->prefix, - renderer->prefix->size - marker_width); + // the prefix spaces are only pushed when the item has children: + if (node->first_child != NULL) { + cmark_strbuf_truncate(renderer->prefix, + renderer->prefix->size - marker_width); + } CR(); } break;