5
5
#define CMARK_NO_SHORT_NAMES
6
6
#include "cmark.h"
7
7
#include "node.h"
8
+ #include "parser.h"
8
9
9
10
#include "harness.h"
10
11
#include "cplusplus.h"
@@ -883,6 +884,41 @@ static void test_feed_across_line_ending(test_batch_runner *runner) {
883
884
cmark_node_free (document );
884
885
}
885
886
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
+
886
922
int main () {
887
923
int retval ;
888
924
test_batch_runner * runner = test_batch_runner_new ();
@@ -908,6 +944,7 @@ int main() {
908
944
test_cplusplus (runner );
909
945
test_safe (runner );
910
946
test_feed_across_line_ending (runner );
947
+ test_bufsize_overflow (runner );
911
948
912
949
test_print_summary (runner );
913
950
retval = test_ok (runner ) ? 0 : 1 ;
0 commit comments