Skip to content

Commit 714b200

Browse files
More (conditional) sourcepos!
+ Expose references as part of the AST
1 parent a8d5bd4 commit 714b200

20 files changed

+964
-88
lines changed

api_test/main.c

Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
#define CMARK_NO_SHORT_NAMES
66
#include "cmark.h"
77
#include "node.h"
8+
#include "parser.h"
89

910
#include "harness.h"
1011
#include "cplusplus.h"
@@ -883,6 +884,41 @@ static void test_feed_across_line_ending(test_batch_runner *runner) {
883884
cmark_node_free(document);
884885
}
885886

887+
static cmark_node *S_parse_with_fake_total(bufsize_t fake_total,
888+
const char *str,
889+
cmark_err_type *err) {
890+
cmark_parser *parser = cmark_parser_new(CMARK_OPT_DEFAULT);
891+
parser->total_bytes = fake_total;
892+
cmark_parser_feed(parser, str, strlen(str));
893+
cmark_node *doc = cmark_parser_finish(parser);
894+
*err = cmark_parser_get_error(parser);
895+
cmark_parser_free(parser);
896+
return doc;
897+
}
898+
899+
static void test_bufsize_overflow(test_batch_runner *runner) {
900+
cmark_node *doc;
901+
cmark_err_type err;
902+
903+
doc = S_parse_with_fake_total(BUFSIZE_MAX, "a", &err);
904+
OK(runner, doc == NULL, "parse 1 byte after BUFSIZE_MAX bytes fails");
905+
INT_EQ(runner, err, CMARK_ERR_INPUT_TOO_LARGE,
906+
"parse 1 byte after BUFSIZE_MAX bytes error code");
907+
908+
doc = S_parse_with_fake_total(BUFSIZE_MAX - 9, "0123456789", &err);
909+
OK(runner, doc == NULL, "parse 10 byte after BUFSIZE_MAX-9 bytes fails");
910+
INT_EQ(runner, err, CMARK_ERR_INPUT_TOO_LARGE,
911+
"parse 10 byte after BUFSIZE_MAX-9 bytes error code");
912+
913+
doc = S_parse_with_fake_total(BUFSIZE_MAX - 1, "a", &err);
914+
OK(runner, doc != NULL, "parse 1 byte after BUFSIZE_MAX-1 bytes");
915+
cmark_node_free(doc);
916+
917+
doc = S_parse_with_fake_total(BUFSIZE_MAX - 10, "0123456789", &err);
918+
OK(runner, doc != NULL, "parse 10 byte after BUFSIZE_MAX-10 bytes");
919+
cmark_node_free(doc);
920+
}
921+
886922
int main() {
887923
int retval;
888924
test_batch_runner *runner = test_batch_runner_new();
@@ -908,6 +944,7 @@ int main() {
908944
test_cplusplus(runner);
909945
test_safe(runner);
910946
test_feed_across_line_ending(runner);
947+
test_bufsize_overflow(runner);
911948

912949
test_print_summary(runner);
913950
retval = test_ok(runner) ? 0 : 1;

src/CMakeLists.txt

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@ set(HEADERS
1818
houdini.h
1919
cmark_ctype.h
2020
render.h
21+
source_map.h
2122
)
2223
set(LIBRARY_SOURCES
2324
cmark.c
@@ -40,6 +41,7 @@ set(LIBRARY_SOURCES
4041
houdini_html_e.c
4142
houdini_html_u.c
4243
cmark_ctype.c
44+
source_map.c
4345
${HEADERS}
4446
)
4547

0 commit comments

Comments
 (0)