- Commit
- 1f51da22e4d56ae0f0bc3ae75817e99a91038226
- Parent
- e89187b0604eff3a8251a902bfbbdb3cd7ff415b
- Author
- John MacFarlane <jgm@berkeley.edu>
- Date
Merge pull request #160 from kivikakk/kivikakk/fix-nul-lf-sequence
Fix NUL-LF sequence lex
My personal build of CMark ✏️
Merge pull request #160 from kivikakk/kivikakk/fix-nul-lf-sequence
Fix NUL-LF sequence lex
2 files changed, 10 insertions, 2 deletions
Status | File Name | N° Changes | Insertions | Deletions |
Modified | api_test/main.c | 7 | 7 | 0 |
Modified | src/blocks.c | 5 | 3 | 2 |
diff --git a/api_test/main.c b/api_test/main.c @@ -732,6 +732,13 @@ static void utf8(test_batch_runner *runner) { string_with_null, sizeof(string_with_null) - 1, CMARK_OPT_DEFAULT); STR_EQ(runner, html, "<p>((((" UTF8_REPL "))))</p>\n", "utf8 with U+0000"); free(html); + + // Test NUL followed by newline + static const char string_with_nul_lf[] = "```\n\0\n```\n"; + html = cmark_markdown_to_html( + string_with_nul_lf, sizeof(string_with_nul_lf) - 1, CMARK_OPT_DEFAULT); + STR_EQ(runner, html, "<pre><code>\xef\xbf\xbd\n</code></pre>\n", "utf8 with \\0\\n"); + free(html); } static void test_char(test_batch_runner *runner, int valid, const char *utf8,
diff --git a/src/blocks.c b/src/blocks.c @@ -563,7 +563,6 @@ static void S_parser_feed(cmark_parser *parser, const unsigned char *buffer, cmark_strbuf_put(&parser->linebuf, buffer, chunk_len); // add replacement character cmark_strbuf_put(&parser->linebuf, repl, 3); - chunk_len += 1; // so we advance the buffer past NULL } else { cmark_strbuf_put(&parser->linebuf, buffer, chunk_len); } @@ -576,7 +575,9 @@ static void S_parser_feed(cmark_parser *parser, const unsigned char *buffer, if (buffer == end) parser->last_buffer_ended_with_cr = true; } - if (buffer < end && *buffer == '\n') + if (buffer < end && *buffer == '\0') + buffer++; + else if (buffer < end && *buffer == '\n') buffer++; } }