commonmarker 0.16.4 → 0.16.5

Sign up to get free protection for your applications and to get access to all the features.

Potentially problematic release.


This version of commonmarker might be problematic. Click here for more details.

Files changed (74) hide show
  1. checksums.yaml +4 -4
  2. data/ext/commonmarker/cmark/CMakeLists.txt +2 -1
  3. data/ext/commonmarker/cmark/Makefile +10 -2
  4. data/ext/commonmarker/cmark/README.md +16 -6
  5. data/ext/commonmarker/cmark/api_test/main.c +2 -2
  6. data/ext/commonmarker/cmark/changelog.txt +5 -0
  7. data/ext/commonmarker/cmark/man/man3/cmark-gfm.3 +23 -6
  8. data/ext/commonmarker/cmark/src/CMakeLists.txt +11 -0
  9. data/ext/commonmarker/cmark/src/arena.c +2 -1
  10. data/ext/commonmarker/cmark/src/blocks.c +4 -2
  11. data/ext/commonmarker/cmark/src/cmark.h +14 -5
  12. data/ext/commonmarker/cmark/src/commonmark.c +6 -3
  13. data/ext/commonmarker/cmark/src/inlines.c +9 -7
  14. data/ext/commonmarker/cmark/src/latex.c +23 -9
  15. data/ext/commonmarker/cmark/src/node.c +1 -1
  16. data/ext/commonmarker/cmark/src/scanners.c +2 -2
  17. data/ext/commonmarker/cmark/src/scanners.re +1 -1
  18. data/ext/commonmarker/cmark/test/cmark-fuzz.c +28 -0
  19. data/ext/commonmarker/cmark/test/fuzzing_dictionary +49 -0
  20. data/ext/commonmarker/cmark/test/regression.txt +18 -0
  21. data/ext/commonmarker/cmark/test/run-cmark-fuzz +4 -0
  22. data/ext/commonmarker/cmark/test/spec.txt +27 -16
  23. data/ext/commonmarker/cmark/tools/Dockerfile +15 -12
  24. data/lib/commonmarker/version.rb +1 -1
  25. metadata +5 -51
  26. data/ext/commonmarker/cmark/test/afl_dictionary/asterisk +0 -1
  27. data/ext/commonmarker/cmark/test/afl_dictionary/attr_generic +0 -1
  28. data/ext/commonmarker/cmark/test/afl_dictionary/attr_href +0 -1
  29. data/ext/commonmarker/cmark/test/afl_dictionary/attr_xml_lang +0 -1
  30. data/ext/commonmarker/cmark/test/afl_dictionary/attr_xmlns +0 -1
  31. data/ext/commonmarker/cmark/test/afl_dictionary/backslash +0 -1
  32. data/ext/commonmarker/cmark/test/afl_dictionary/backtick +0 -1
  33. data/ext/commonmarker/cmark/test/afl_dictionary/colon +0 -1
  34. data/ext/commonmarker/cmark/test/afl_dictionary/dashes +0 -1
  35. data/ext/commonmarker/cmark/test/afl_dictionary/double_quote +0 -1
  36. data/ext/commonmarker/cmark/test/afl_dictionary/entity_builtin +0 -1
  37. data/ext/commonmarker/cmark/test/afl_dictionary/entity_decimal +0 -1
  38. data/ext/commonmarker/cmark/test/afl_dictionary/entity_external +0 -1
  39. data/ext/commonmarker/cmark/test/afl_dictionary/entity_hex +0 -1
  40. data/ext/commonmarker/cmark/test/afl_dictionary/equals +0 -1
  41. data/ext/commonmarker/cmark/test/afl_dictionary/exclamation +0 -1
  42. data/ext/commonmarker/cmark/test/afl_dictionary/greater_than +0 -1
  43. data/ext/commonmarker/cmark/test/afl_dictionary/hash +0 -1
  44. data/ext/commonmarker/cmark/test/afl_dictionary/hyphen +0 -0
  45. data/ext/commonmarker/cmark/test/afl_dictionary/indent +0 -1
  46. data/ext/commonmarker/cmark/test/afl_dictionary/left_bracket +0 -1
  47. data/ext/commonmarker/cmark/test/afl_dictionary/left_paren +0 -1
  48. data/ext/commonmarker/cmark/test/afl_dictionary/less_than +0 -1
  49. data/ext/commonmarker/cmark/test/afl_dictionary/plus +0 -1
  50. data/ext/commonmarker/cmark/test/afl_dictionary/right_bracket +0 -1
  51. data/ext/commonmarker/cmark/test/afl_dictionary/right_paren +0 -1
  52. data/ext/commonmarker/cmark/test/afl_dictionary/single_quote +0 -1
  53. data/ext/commonmarker/cmark/test/afl_dictionary/string_any +0 -1
  54. data/ext/commonmarker/cmark/test/afl_dictionary/string_brackets +0 -1
  55. data/ext/commonmarker/cmark/test/afl_dictionary/string_cdata +0 -1
  56. data/ext/commonmarker/cmark/test/afl_dictionary/string_dashes +0 -1
  57. data/ext/commonmarker/cmark/test/afl_dictionary/string_empty_dblquotes +0 -1
  58. data/ext/commonmarker/cmark/test/afl_dictionary/string_empty_quotes +0 -1
  59. data/ext/commonmarker/cmark/test/afl_dictionary/string_idrefs +0 -1
  60. data/ext/commonmarker/cmark/test/afl_dictionary/string_parentheses +0 -1
  61. data/ext/commonmarker/cmark/test/afl_dictionary/string_pcdata +0 -1
  62. data/ext/commonmarker/cmark/test/afl_dictionary/tag_cdata +0 -1
  63. data/ext/commonmarker/cmark/test/afl_dictionary/tag_close +0 -1
  64. data/ext/commonmarker/cmark/test/afl_dictionary/tag_doctype +0 -1
  65. data/ext/commonmarker/cmark/test/afl_dictionary/tag_element +0 -1
  66. data/ext/commonmarker/cmark/test/afl_dictionary/tag_entity +0 -1
  67. data/ext/commonmarker/cmark/test/afl_dictionary/tag_notation +0 -1
  68. data/ext/commonmarker/cmark/test/afl_dictionary/tag_open +0 -1
  69. data/ext/commonmarker/cmark/test/afl_dictionary/tag_open_close +0 -1
  70. data/ext/commonmarker/cmark/test/afl_dictionary/tag_open_exclamation +0 -1
  71. data/ext/commonmarker/cmark/test/afl_dictionary/tag_open_q +0 -1
  72. data/ext/commonmarker/cmark/test/afl_dictionary/tag_sq2_close +0 -1
  73. data/ext/commonmarker/cmark/test/afl_dictionary/tag_xml_q +0 -1
  74. data/ext/commonmarker/cmark/test/afl_dictionary/underscore +0 -1
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: b55efd0b945c8781f23517de410731b3d2949968
4
- data.tar.gz: 0646b61988c1e2a3945a1dfb013dcc9fd36f3063
3
+ metadata.gz: 095c88f0b8335861ecd1f2fd3036eb38e3ba15e5
4
+ data.tar.gz: 523409323276c59e1da4efda9c08d846b512f599
5
5
  SHA512:
6
- metadata.gz: 29cca5037bf400c570a4d95163c0f448169be0672ffe8dc9d309dc4a3687ba7793e412e9d31cb0e378f8bf5c83cdcc5649d61682159892777f021f7f3ef30d94
7
- data.tar.gz: 99707c291528f130ec808985930c7bf82e3d6884209b31782205dc02ac8f46bb7f4c261a5abb076ab0b3001652e3fff4299acebb59adbad3c9a7ced09a7f740d
6
+ metadata.gz: 0bc5a2a5d1193c8beb136e392db2fdb1f323e0b87f73aa4e2a54eb0ebc8240518a0151852e82b64ed2e8469e4786f41b8b166162cd0b929e38e6e385c5b6c8b2
7
+ data.tar.gz: 7bd29b88abaaacc24e05fa03bbfccffb9e703d0f57ec0efe903aa502bd7db3efdb6ef8e4682cdb36f58f04828e763f5f988a82f42f02c125fcd6e0f9e8ec01ee
@@ -19,12 +19,13 @@ set(PROJECT_NAME "cmark")
19
19
  set(PROJECT_VERSION_MAJOR 0)
20
20
  set(PROJECT_VERSION_MINOR 27)
21
21
  set(PROJECT_VERSION_PATCH 1)
22
- set(PROJECT_VERSION_GFM 1)
22
+ set(PROJECT_VERSION_GFM 2)
23
23
  set(PROJECT_VERSION ${PROJECT_VERSION_MAJOR}.${PROJECT_VERSION_MINOR}.${PROJECT_VERSION_PATCH}.gfm.${PROJECT_VERSION_GFM} )
24
24
 
25
25
  option(CMARK_TESTS "Build cmark tests and enable testing" ON)
26
26
  option(CMARK_STATIC "Build static libcmark-gfm library" ON)
27
27
  option(CMARK_SHARED "Build shared libcmark-gfm library" ON)
28
+ option(CMARK_LIB_FUZZER "Build libFuzzer fuzzing harness" OFF)
28
29
 
29
30
  add_subdirectory(src)
30
31
  add_subdirectory(extensions)
@@ -16,6 +16,7 @@ BENCHFILE=$(BENCHDIR)/benchinput.md
16
16
  ALLTESTS=alltests.md
17
17
  NUMRUNS?=20
18
18
  CMARK=$(BUILDDIR)/src/cmark-gfm
19
+ CMARK_FUZZ=$(BUILDDIR)/src/cmark-fuzz
19
20
  PROG?=$(CMARK)
20
21
  VERSION?=$(SPECVERSION)
21
22
  RELEASE?=CommonMark-$(VERSION)
@@ -24,7 +25,7 @@ CLANG_CHECK?=clang-check
24
25
  CLANG_FORMAT=clang-format-3.5 -style llvm -sort-includes=0 -i
25
26
  AFL_PATH?=/usr/local/bin
26
27
 
27
- .PHONY: all cmake_build leakcheck clean fuzztest test debug ubsan asan mingw archive newbench bench format update-spec afl clang-check docker
28
+ .PHONY: all cmake_build leakcheck clean fuzztest test debug ubsan asan mingw archive newbench bench format update-spec afl clang-check docker libFuzzer
28
29
 
29
30
  all: cmake_build man/man3/cmark-gfm.3
30
31
 
@@ -79,11 +80,18 @@ afl:
79
80
  $(AFL_PATH)/afl-fuzz \
80
81
  -i test/afl_test_cases \
81
82
  -o test/afl_results \
82
- -x test/afl_dictionary \
83
+ -x test/fuzzing_dictionary \
83
84
  $(AFL_OPTIONS) \
84
85
  -t 100 \
85
86
  $(CMARK) -e table -e strikethrough -e autolink -e tagfilter $(CMARK_OPTS)
86
87
 
88
+ libFuzzer:
89
+ @[ -n "$(LIB_FUZZER_PATH)" ] || { echo '$$LIB_FUZZER_PATH not set'; false; }
90
+ mkdir -p $(BUILDDIR)
91
+ cd $(BUILDDIR) && cmake -DCMAKE_BUILD_TYPE=Asan -DCMARK_LIB_FUZZER=ON -DCMAKE_LIB_FUZZER_PATH=$(LIB_FUZZER_PATH) ..
92
+ $(MAKE) -j2 -C $(BUILDDIR) cmark-fuzz
93
+ test/run-cmark-fuzz $(CMARK_FUZZ)
94
+
87
95
  clang-check: all
88
96
  ${CLANG_CHECK} -p build -analyze src/*.c
89
97
 
@@ -59,12 +59,14 @@ It is easy to use `libcmark` in python, lua, ruby, and other dynamic
59
59
  languages: see the `wrappers/` subdirectory for some simple examples.
60
60
 
61
61
  There are also libraries that wrap `libcmark` for
62
- [go](https://github.com/rhinoman/go-commonmark),
63
- [Haskell](http://hackage.haskell.org/package/cmark),
64
- [ruby](https://github.com/gjtorikian/commonmarker),
65
- [lua](https://github.com/jgm/cmark-lua),
66
- [Perl](https://metacpan.org/release/CommonMark), and
67
- [R](http://cran.r-project.org/package=commonmark).
62
+ [Go](https://github.com/rhinoman/go-commonmark),
63
+ [Haskell](https://hackage.haskell.org/package/cmark),
64
+ [Ruby](https://github.com/gjtorikian/commonmarker),
65
+ [Lua](https://github.com/jgm/cmark-lua),
66
+ [Perl](https://metacpan.org/release/CommonMark),
67
+ [Python](https://pypi.python.org/pypi/paka.cmark),
68
+ [R](https://cran.r-project.org/package=commonmark) and
69
+ [Scala](https://github.com/sparsetech/cmark-scala).
68
70
 
69
71
  Installing
70
72
  ----------
@@ -126,6 +128,13 @@ To do a more systematic fuzz test with [american fuzzy lop]:
126
128
 
127
129
  AFL_PATH=/path/to/afl_directory make afl
128
130
 
131
+ Fuzzing with [libFuzzer] is also supported but, because libFuzzer is still
132
+ under active development, may not work with your system-installed version of
133
+ clang. Assuming LLVM has been built in `$HOME/src/llvm/build` the fuzzer can be
134
+ run with:
135
+
136
+ CC="$HOME/src/llvm/build/bin/clang" LIB_FUZZER_PATH="$HOME/src/llvm/lib/Fuzzer/libFuzzer.a" make libFuzzer
137
+
129
138
  To make a release tarball and zip archive:
130
139
 
131
140
  make archive
@@ -193,3 +202,4 @@ most of the C library's API and its test harness.
193
202
  [Build Status]: https://img.shields.io/travis/github/cmark/master.svg?style=flat
194
203
  [Windows Build Status]: https://ci.appveyor.com/api/projects/status/wv7ifhqhv5itm3d5?svg=true
195
204
  [american fuzzy lop]: http://lcamtuf.coredump.cx/afl/
205
+ [libFuzzer]: http://llvm.org/docs/LibFuzzer.html
@@ -59,8 +59,8 @@ static void constructor(test_batch_runner *runner) {
59
59
  "default is list type is bullet");
60
60
  INT_EQ(runner, cmark_node_get_list_delim(node), CMARK_NO_DELIM,
61
61
  "default is list delim is NO_DELIM");
62
- INT_EQ(runner, cmark_node_get_list_start(node), 1,
63
- "default is list start is 1");
62
+ INT_EQ(runner, cmark_node_get_list_start(node), 0,
63
+ "default is list start is 0");
64
64
  INT_EQ(runner, cmark_node_get_list_tight(node), 0,
65
65
  "default is list is loose");
66
66
  break;
@@ -1,3 +1,8 @@
1
+ [0.27.1.gfm.2]
2
+
3
+ * Fix a number of bugs (reading past end of buffer, undefined behavior.
4
+ * Add `cmark_syntax_extension_get_private()`. (Jonathan Müller)
5
+
1
6
  [0.27.1.gfm.1]
2
7
 
3
8
  * Add plaintext renderer.
@@ -1,4 +1,4 @@
1
- .TH cmark-gfm 3 "May 05, 2017" "LOCAL" "Library Functions Manual"
1
+ .TH cmark-gfm 3 "April 03, 2017" "LOCAL" "Library Functions Manual"
2
2
  .SH
3
3
  NAME
4
4
  .PP
@@ -397,7 +397,8 @@ of the type, or \f[C]"<unknown>"\f[].
397
397
 
398
398
  .PP
399
399
  Returns the string contents of \f[I]node\f[], or an empty string if none
400
- is set.
400
+ is set. Returns NULL if called on a node that does not have string
401
+ content.
401
402
 
402
403
  .PP
403
404
  \fIint\f[] \fBcmark_node_set_literal\f[](\fIcmark_node *node\f[], \fIconst char *content\f[])
@@ -504,7 +505,8 @@ Returns code blocks fencing details
504
505
 
505
506
  .PP
506
507
  Returns the URL of a link or image \f[I]node\f[], or an empty string if
507
- no URL is set.
508
+ no URL is set. Returns NULL if called on a node that is not a link or
509
+ image.
508
510
 
509
511
  .PP
510
512
  \fIint\f[] \fBcmark_node_set_url\f[](\fIcmark_node *node\f[], \fIconst char *url\f[])
@@ -518,7 +520,8 @@ on failure.
518
520
 
519
521
  .PP
520
522
  Returns the title of a link or image \f[I]node\f[], or an empty string
521
- if no title is set.
523
+ if no title is set. Returns NULL if called on a node that is not a link
524
+ or image.
522
525
 
523
526
  .PP
524
527
  \fIint\f[] \fBcmark_node_set_title\f[](\fIcmark_node *node\f[], \fIconst char *title\f[])
@@ -532,7 +535,8 @@ on failure.
532
535
 
533
536
  .PP
534
537
  Returns the literal "on enter" text for a custom \f[I]node\f[], or an
535
- empty string if no on_enter is set.
538
+ empty string if no on_enter is set. Returns NULL if called on a
539
+ non\-custom node.
536
540
 
537
541
  .PP
538
542
  \fIint\f[] \fBcmark_node_set_on_enter\f[](\fIcmark_node *node\f[], \fIconst char *on_enter\f[])
@@ -547,7 +551,8 @@ success 0 on failure.
547
551
 
548
552
  .PP
549
553
  Returns the literal "on exit" text for a custom \f[I]node\f[], or an
550
- empty string if no on_exit is set.
554
+ empty string if no on_exit is set. Returns NULL if called on a
555
+ non\-custom node.
551
556
 
552
557
  .PP
553
558
  \fIint\f[] \fBcmark_node_set_on_exit\f[](\fIcmark_node *node\f[], \fIconst char *on_exit\f[])
@@ -862,6 +867,18 @@ Render \f[C]softbreak\f[] elements as spaces.
862
867
  .SS
863
868
  Options affecting parsing
864
869
 
870
+ .PP
871
+ .nf
872
+ \fC
873
+ .RS 0n
874
+ #define CMARK_OPT_NORMALIZE (1 << 8)
875
+ .RE
876
+ \f[]
877
+ .fi
878
+
879
+ .PP
880
+ Legacy option (no effect).
881
+
865
882
  .PP
866
883
  .nf
867
884
  \fC
@@ -203,3 +203,14 @@ endif()
203
203
  if(CMAKE_BUILD_TYPE STREQUAL "Ubsan")
204
204
  set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fsanitize=undefined")
205
205
  endif()
206
+
207
+ if(CMARK_LIB_FUZZER)
208
+ set(FUZZ_HARNESS "cmark-fuzz")
209
+ add_executable(${FUZZ_HARNESS} ../test/cmark-fuzz.c ${LIBRARY_SOURCES})
210
+ target_link_libraries(${FUZZ_HARNESS} "${CMAKE_LIB_FUZZER_PATH}")
211
+ set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fsanitize-coverage=trace-pc-guard")
212
+
213
+ # cmark is written in C but the libFuzzer runtime is written in C++ which
214
+ # needs to link against the C++ runtime. Explicitly link it into cmark-fuzz
215
+ set_target_properties(${FUZZ_HARNESS} PROPERTIES LINK_FLAGS "-lstdc++")
216
+ endif()
@@ -71,7 +71,8 @@ static void *arena_calloc(size_t nmem, size_t size) {
71
71
  }
72
72
  void *ptr = (uint8_t *) A->ptr + A->used;
73
73
  A->used += sz;
74
- *((size_t *) ptr) = nmem * size;
74
+ size_t new_sz = nmem * size;
75
+ memcpy(ptr, &new_sz, sizeof(new_sz));
75
76
  return (uint8_t *) ptr + sizeof(size_t);
76
77
  }
77
78
 
@@ -460,8 +460,8 @@ static bufsize_t parse_list_marker(cmark_mem *mem, cmark_chunk *input,
460
460
  data->marker_offset = 0; // will be adjusted later
461
461
  data->list_type = CMARK_BULLET_LIST;
462
462
  data->bullet_char = c;
463
- data->start = 1;
464
- data->delimiter = CMARK_PERIOD_DELIM;
463
+ data->start = 0;
464
+ data->delimiter = CMARK_NO_DELIM;
465
465
  data->tight = false;
466
466
  } else if (cmark_isdigit(c)) {
467
467
  int start = 0;
@@ -1247,6 +1247,8 @@ static void S_process_line(cmark_parser *parser, const unsigned char *buffer,
1247
1247
  else
1248
1248
  cmark_strbuf_put(&parser->curline, buffer, bytes);
1249
1249
 
1250
+ bytes = parser->curline.size;
1251
+
1250
1252
  // ensure line ends with a newline:
1251
1253
  if (bytes == 0 || !S_is_line_end_char(parser->curline.ptr[bytes - 1]))
1252
1254
  cmark_strbuf_putc(&parser->curline, '\n');
@@ -337,7 +337,8 @@ CMARK_EXPORT
337
337
  const char *cmark_node_get_type_string(cmark_node *node);
338
338
 
339
339
  /** Returns the string contents of 'node', or an empty
340
- string if none is set.
340
+ string if none is set. Returns NULL if called on a
341
+ node that does not have string content.
341
342
  */
342
343
  CMARK_EXPORT const char *cmark_node_get_literal(cmark_node *node);
343
344
 
@@ -415,7 +416,8 @@ CMARK_EXPORT int cmark_node_set_fenced(cmark_node * node, int fenced,
415
416
  CMARK_EXPORT int cmark_node_get_fenced(cmark_node *node, int *length, int *offset, char *character);
416
417
 
417
418
  /** Returns the URL of a link or image 'node', or an empty string
418
- if no URL is set.
419
+ if no URL is set. Returns NULL if called on a node that is
420
+ not a link or image.
419
421
  */
420
422
  CMARK_EXPORT const char *cmark_node_get_url(cmark_node *node);
421
423
 
@@ -425,7 +427,8 @@ CMARK_EXPORT const char *cmark_node_get_url(cmark_node *node);
425
427
  CMARK_EXPORT int cmark_node_set_url(cmark_node *node, const char *url);
426
428
 
427
429
  /** Returns the title of a link or image 'node', or an empty
428
- string if no title is set.
430
+ string if no title is set. Returns NULL if called on a node
431
+ that is not a link or image.
429
432
  */
430
433
  CMARK_EXPORT const char *cmark_node_get_title(cmark_node *node);
431
434
 
@@ -435,7 +438,8 @@ CMARK_EXPORT const char *cmark_node_get_title(cmark_node *node);
435
438
  CMARK_EXPORT int cmark_node_set_title(cmark_node *node, const char *title);
436
439
 
437
440
  /** Returns the literal "on enter" text for a custom 'node', or
438
- an empty string if no on_enter is set.
441
+ an empty string if no on_enter is set. Returns NULL if called
442
+ on a non-custom node.
439
443
  */
440
444
  CMARK_EXPORT const char *cmark_node_get_on_enter(cmark_node *node);
441
445
 
@@ -447,7 +451,8 @@ CMARK_EXPORT int cmark_node_set_on_enter(cmark_node *node,
447
451
  const char *on_enter);
448
452
 
449
453
  /** Returns the literal "on exit" text for a custom 'node', or
450
- an empty string if no on_exit is set.
454
+ an empty string if no on_exit is set. Returns NULL if
455
+ called on a non-custom node.
451
456
  */
452
457
  CMARK_EXPORT const char *cmark_node_get_on_exit(cmark_node *node);
453
458
 
@@ -690,6 +695,10 @@ char *cmark_render_latex_with_mem(cmark_node *root, int options, int width, cmar
690
695
  * ### Options affecting parsing
691
696
  */
692
697
 
698
+ /** Legacy option (no effect).
699
+ */
700
+ #define CMARK_OPT_NORMALIZE (1 << 8)
701
+
693
702
  /** Validate UTF-8 in the input before parsing, replacing illegal
694
703
  * sequences with the replacement character U+FFFD.
695
704
  */
@@ -1,6 +1,7 @@
1
1
  #include <stdlib.h>
2
2
  #include <stdio.h>
3
3
  #include <string.h>
4
+ #include <stdint.h>
4
5
  #include <assert.h>
5
6
 
6
7
  #include "config.h"
@@ -83,7 +84,9 @@ static int longest_backtick_sequence(const char *code) {
83
84
  }
84
85
 
85
86
  static int shortest_unused_backtick_sequence(const char *code) {
86
- int32_t used = 1;
87
+ // note: if the shortest sequence is >= 32, this returns 32
88
+ // so as not to overflow the bit array.
89
+ uint32_t used = 1;
87
90
  int current = 0;
88
91
  size_t i = 0;
89
92
  size_t code_len = strlen(code);
@@ -91,7 +94,7 @@ static int shortest_unused_backtick_sequence(const char *code) {
91
94
  if (code[i] == '`') {
92
95
  current++;
93
96
  } else {
94
- if (current) {
97
+ if (current > 0 && current < 32) {
95
98
  used |= (1 << current);
96
99
  }
97
100
  current = 0;
@@ -100,7 +103,7 @@ static int shortest_unused_backtick_sequence(const char *code) {
100
103
  }
101
104
  // return number of first bit that is 0:
102
105
  i = 0;
103
- while (used & 1) {
106
+ while (i < 32 && used & 1) {
104
107
  used = used >> 1;
105
108
  i++;
106
109
  }
@@ -322,13 +322,13 @@ static int scan_delims(subject *subj, unsigned char c, bool *can_open,
322
322
  after_char = 10;
323
323
  }
324
324
  left_flanking = numdelims > 0 && !cmark_utf8proc_is_space(after_char) &&
325
- !(cmark_utf8proc_is_punctuation(after_char) &&
326
- !cmark_utf8proc_is_space(before_char) &&
327
- !cmark_utf8proc_is_punctuation(before_char));
325
+ (!cmark_utf8proc_is_punctuation(after_char) ||
326
+ cmark_utf8proc_is_space(before_char) ||
327
+ cmark_utf8proc_is_punctuation(before_char));
328
328
  right_flanking = numdelims > 0 && !cmark_utf8proc_is_space(before_char) &&
329
- !(cmark_utf8proc_is_punctuation(before_char) &&
330
- !cmark_utf8proc_is_space(after_char) &&
331
- !cmark_utf8proc_is_punctuation(after_char));
329
+ (!cmark_utf8proc_is_punctuation(before_char) ||
330
+ cmark_utf8proc_is_space(after_char) ||
331
+ cmark_utf8proc_is_punctuation(after_char));
332
332
  if (c == '_') {
333
333
  *can_open = left_flanking &&
334
334
  (!right_flanking || cmark_utf8proc_is_punctuation(before_char));
@@ -863,7 +863,9 @@ static bufsize_t manual_scan_link_url(cmark_chunk *input, bufsize_t offset) {
863
863
  }
864
864
  } else {
865
865
  while (i < input->len) {
866
- if (input->data[i] == '\\')
866
+ if (input->data[i] == '\\' &&
867
+ i + 1 < input-> len &&
868
+ cmark_ispunct(input->data[i+1]))
867
869
  i += 2;
868
870
  else if (input->data[i] == '(') {
869
871
  ++nb_p;
@@ -181,6 +181,10 @@ static link_type get_link_type(cmark_node *node) {
181
181
 
182
182
  link_text = node->first_child;
183
183
  cmark_consolidate_text_nodes(link_text);
184
+
185
+ if (!link_text)
186
+ return NO_LINK;
187
+
184
188
  realurl = (char *)url;
185
189
  realurllen = (int)url_len;
186
190
  if (strncmp(realurl, "mailto:", 7) == 0) {
@@ -218,11 +222,10 @@ static int S_get_enumlevel(cmark_node *node) {
218
222
  static int S_render_node(cmark_renderer *renderer, cmark_node *node,
219
223
  cmark_event_type ev_type, int options) {
220
224
  int list_number;
225
+ int enumlevel;
221
226
  char list_number_string[LIST_NUMBER_STRING_SIZE];
222
227
  bool entering = (ev_type == CMARK_EVENT_ENTER);
223
228
  cmark_list_type list_type;
224
- const char *roman_numerals[] = {"", "i", "ii", "iii", "iv", "v",
225
- "vi", "vii", "viii", "ix", "x"};
226
229
  bool allow_wrap = renderer->width > 0 && !(CMARK_OPT_NOBREAKS & options);
227
230
 
228
231
  if (node->extension && node->extension->latex_render_func) {
@@ -253,13 +256,24 @@ static int S_render_node(cmark_renderer *renderer, cmark_node *node,
253
256
  CR();
254
257
  list_number = cmark_node_get_list_start(node);
255
258
  if (list_number > 1) {
256
- snprintf(list_number_string, LIST_NUMBER_STRING_SIZE, "%d",
257
- list_number);
258
- LIT("\\setcounter{enum");
259
- LIT((char *)roman_numerals[S_get_enumlevel(node)]);
260
- LIT("}{");
261
- OUT(list_number_string, false, NORMAL);
262
- LIT("}");
259
+ enumlevel = S_get_enumlevel(node);
260
+ // latex normally supports only five levels
261
+ if (enumlevel >= 1 && enumlevel <= 5) {
262
+ snprintf(list_number_string, LIST_NUMBER_STRING_SIZE, "%d",
263
+ list_number);
264
+ LIT("\\setcounter{enum");
265
+ switch(enumlevel) {
266
+ case 1: LIT("i"); break;
267
+ case 2: LIT("ii"); break;
268
+ case 3: LIT("iii"); break;
269
+ case 4: LIT("iv"); break;
270
+ case 5: LIT("v"); break;
271
+ default: LIT("i"); break;
272
+ }
273
+ LIT("}{");
274
+ OUT(list_number_string, false, NORMAL);
275
+ LIT("}");
276
+ }
263
277
  CR();
264
278
  }
265
279
  } else {
@@ -81,7 +81,7 @@ cmark_node *cmark_node_new_with_mem(cmark_node_type type, cmark_mem *mem) {
81
81
  case CMARK_NODE_LIST: {
82
82
  cmark_list *list = &node->as.list;
83
83
  list->list_type = CMARK_BULLET_LIST;
84
- list->start = 1;
84
+ list->start = 0;
85
85
  list->tight = false;
86
86
  break;
87
87
  }
@@ -752,7 +752,7 @@ bufsize_t _scan_autolink_uri(const unsigned char *p) {
752
752
  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
753
753
  0, 0, 0, 0, 0, 128, 128, 128, 128, 128, 128, 128, 128, 128,
754
754
  128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128,
755
- 128, 128, 128, 128, 0, 128, 0, 128, 128, 128, 128, 128, 128, 128,
755
+ 128, 128, 128, 128, 128, 128, 0, 128, 128, 128, 128, 128, 128, 128,
756
756
  128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128,
757
757
  128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128,
758
758
  128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128,
@@ -839,7 +839,7 @@ bufsize_t _scan_autolink_uri(const unsigned char *p) {
839
839
  }
840
840
  if (yych <= 0xEC) {
841
841
  if (yych <= 0xC1) {
842
- if (yych <= '<')
842
+ if (yych <= ' ')
843
843
  goto yy45;
844
844
  if (yych <= '>')
845
845
  goto yy85;
@@ -91,7 +91,7 @@ bufsize_t _scan_autolink_uri(const unsigned char *p)
91
91
  const unsigned char *marker = NULL;
92
92
  const unsigned char *start = p;
93
93
  /*!re2c
94
- scheme [:][^\x00-\x20<>]*[>] { return (bufsize_t)(p - start); }
94
+ scheme [:][^\x00-\x20>]*[>] { return (bufsize_t)(p - start); }
95
95
  * { return 0; }
96
96
  */
97
97
  }
@@ -0,0 +1,28 @@
1
+ #include <stdint.h>
2
+ #include <stdlib.h>
3
+ #include "cmark.h"
4
+
5
+ int LLVMFuzzerTestOneInput(const uint8_t* data, size_t size) {
6
+ int options = 0;
7
+ if (size > sizeof(options)) {
8
+ /* First 4 bytes of input are treated as options */
9
+ int options = *(const int *)data;
10
+
11
+ /* Mask off valid option bits */
12
+ options = options & (CMARK_OPT_SOURCEPOS | CMARK_OPT_HARDBREAKS | CMARK_OPT_SAFE | CMARK_OPT_NOBREAKS | CMARK_OPT_NORMALIZE | CMARK_OPT_VALIDATE_UTF8 | CMARK_OPT_SMART);
13
+
14
+ /* Remainder of input is the markdown */
15
+ const char *markdown = (const char *)(data + sizeof(options));
16
+ const size_t markdown_size = size - sizeof(options);
17
+ cmark_node *doc = cmark_parse_document(markdown, markdown_size, options);
18
+
19
+ free(cmark_render_commonmark(doc, options, 80));
20
+ free(cmark_render_html(doc, options, NULL));
21
+ free(cmark_render_latex(doc, options, 80));
22
+ free(cmark_render_man(doc, options, 80));
23
+ free(cmark_render_xml(doc, options));
24
+
25
+ cmark_node_free(doc);
26
+ }
27
+ return 0;
28
+ }
@@ -0,0 +1,49 @@
1
+ asterisk="*"
2
+ attr_generic=" a=\"1\""
3
+ attr_href=" href=\"1\""
4
+ attr_xml_lang=" xml:lang=\"1\""
5
+ attr_xmlns=" xmlns=\"1\""
6
+ backslash="\\"
7
+ backtick="`"
8
+ colon=":"
9
+ dashes="---"
10
+ double_quote="\""
11
+ entity_builtin="&lt;"
12
+ entity_decimal="&#1;"
13
+ entity_external="&a;"
14
+ entity_hex="&#x1;"
15
+ equals="==="
16
+ exclamation="!"
17
+ greater_than=">"
18
+ hash="#"
19
+ hyphen="-"
20
+ indent=" "
21
+ left_bracket="["
22
+ left_paren="("
23
+ less_than="<"
24
+ plus="+"
25
+ right_bracket="]"
26
+ right_paren=")"
27
+ single_quote="'"
28
+ string_any="ANY"
29
+ string_brackets="[]"
30
+ string_cdata="CDATA"
31
+ string_dashes="--"
32
+ string_empty_dblquotes="\"\""
33
+ string_empty_quotes="''"
34
+ string_idrefs="IDREFS"
35
+ string_parentheses="()"
36
+ string_pcdata="#PCDATA"
37
+ tag_cdata="<![CDATA["
38
+ tag_close="</a>"
39
+ tag_doctype="<!DOCTYPE"
40
+ tag_element="<!ELEMENT"
41
+ tag_entity="<!ENTITY"
42
+ tag_notation="<!NOTATION"
43
+ tag_open="<a>"
44
+ tag_open_close="<a />"
45
+ tag_open_exclamation="<!"
46
+ tag_open_q="<?"
47
+ tag_sq2_close="]]>"
48
+ tag_xml_q="<?xml?>"
49
+ underscore="_"
@@ -74,3 +74,21 @@ a***b* c*
74
74
  <p>a*<em><em>b</em> c</em></p>
75
75
  ````````````````````````````````
76
76
 
77
+ Issue #193 - unescaped left angle brackets in link destination
78
+
79
+ ```````````````````````````````` example
80
+ [a]
81
+
82
+ [a]: <te<st>
83
+ .
84
+ <p><a href="te%3Cst">a</a></p>
85
+ ````````````````````````````````
86
+
87
+ Issue #192 - escaped spaces in link destination
88
+
89
+
90
+ ```````````````````````````````` example
91
+ [a](te\ st)
92
+ .
93
+ <p>[a](te\ st)</p>
94
+ ````````````````````````````````
@@ -0,0 +1,4 @@
1
+ #!/bin/bash -eu
2
+ CMARK_FUZZ="$1"
3
+ shift
4
+ ASAN_OPTIONS="quarantine_size_mb=10:detect_leaks=1" "${CMARK_FUZZ}" -max_len=256 -timeout=1 -dict=test/fuzzing_dictionary "$@"
@@ -23,10 +23,12 @@ are hence known as **extensions**, and highlighted as such.
23
23
  ## What is Markdown?
24
24
 
25
25
  Markdown is a plain text format for writing structured documents,
26
- based on conventions used for indicating formatting in email and
27
- usenet posts. It was developed in 2004 by John Gruber, who wrote
28
- the first Markdown-to-HTML converter in Perl, and it soon became
29
- ubiquitous. In the next decade, dozens of implementations were
26
+ based on conventions for indicating formatting in email
27
+ and usenet posts. It was developed by John Gruber (with
28
+ help from Aaron Swartz) and released in 2004 in the form of a
29
+ [syntax description](http://daringfireball.net/projects/markdown/syntax)
30
+ and a Perl script (`Markdown.pl`) for converting Markdown to
31
+ HTML. In the next decade, dozens of implementations were
30
32
  developed in many languages. Some extended the original
31
33
  Markdown syntax with conventions for footnotes, tables, and
32
34
  other document elements. Some allowed Markdown documents to be
@@ -324,7 +326,7 @@ form feed (`U+000C`), or carriage return (`U+000D`).
324
326
  characters].
325
327
 
326
328
  A [Unicode whitespace character](@) is
327
- any code point in the Unicode `Zs` class, or a tab (`U+0009`),
329
+ any code point in the Unicode `Zs` general category, or a tab (`U+0009`),
328
330
  carriage return (`U+000D`), newline (`U+000A`), or form feed
329
331
  (`U+000C`).
330
332
 
@@ -343,7 +345,7 @@ is `!`, `"`, `#`, `$`, `%`, `&`, `'`, `(`, `)`,
343
345
 
344
346
  A [punctuation character](@) is an [ASCII
345
347
  punctuation character] or anything in
346
- the Unicode classes `Pc`, `Pd`, `Pe`, `Pf`, `Pi`, `Po`, or `Ps`.
348
+ the general Unicode categories `Pc`, `Pd`, `Pe`, `Pf`, `Pi`, `Po`, or `Ps`.
347
349
 
348
350
  ## Tabs
349
351
 
@@ -414,8 +416,8 @@ as indentation with four spaces would:
414
416
  Normally the `>` that begins a block quote may be followed
415
417
  optionally by a space, which is not considered part of the
416
418
  content. In the following case `>` is followed by a tab,
417
- which is treated as if it were expanded into spaces.
418
- Since one of theses spaces is considered part of the
419
+ which is treated as if it were expanded into three spaces.
420
+ Since one of these spaces is considered part of the
419
421
  delimiter, `foo` is considered to be indented six spaces
420
422
  inside the block quote context, so we get an indented
421
423
  code block starting with two spaces.
@@ -493,7 +495,7 @@ We can think of a document as a sequence of
493
495
  quotations, lists, headings, rules, and code blocks. Some blocks (like
494
496
  block quotes and list items) contain other blocks; others (like
495
497
  headings and paragraphs) contain [inline](@) content---text,
496
- links, emphasized text, images, code, and so on.
498
+ links, emphasized text, images, code spans, and so on.
497
499
 
498
500
  ## Precedence
499
501
 
@@ -6045,6 +6047,15 @@ we just have literal backticks:
6045
6047
  <p>`foo</p>
6046
6048
  ````````````````````````````````
6047
6049
 
6050
+ The following case also illustrates the need for opening and
6051
+ closing backtick strings to be equal in length:
6052
+
6053
+ ```````````````````````````````` example
6054
+ `foo``bar``
6055
+ .
6056
+ <p>`foo<code>bar</code></p>
6057
+ ````````````````````````````````
6058
+
6048
6059
 
6049
6060
  ## Emphasis and strong emphasis
6050
6061
 
@@ -6099,14 +6110,14 @@ characters that is not preceded or followed by a `_` character.
6099
6110
 
6100
6111
  A [left-flanking delimiter run](@) is
6101
6112
  a [delimiter run] that is (a) not followed by [Unicode whitespace],
6102
- and (b) either not followed by a [punctuation character], or
6113
+ and (b) not followed by a [punctuation character], or
6103
6114
  preceded by [Unicode whitespace] or a [punctuation character].
6104
6115
  For purposes of this definition, the beginning and the end of
6105
6116
  the line count as Unicode whitespace.
6106
6117
 
6107
6118
  A [right-flanking delimiter run](@) is
6108
6119
  a [delimiter run] that is (a) not preceded by [Unicode whitespace],
6109
- and (b) either not preceded by a [punctuation character], or
6120
+ and (b) not preceded by a [punctuation character], or
6110
6121
  followed by [Unicode whitespace] or a [punctuation character].
6111
6122
  For purposes of this definition, the beginning and the end of
6112
6123
  the line count as Unicode whitespace.
@@ -6185,7 +6196,7 @@ The following rules define emphasis and strong emphasis:
6185
6196
  7. A double `**` [can close strong emphasis](@)
6186
6197
  iff it is part of a [right-flanking delimiter run].
6187
6198
 
6188
- 8. A double `__` [can close strong emphasis]
6199
+ 8. A double `__` [can close strong emphasis] iff
6189
6200
  it is part of a [right-flanking delimiter run]
6190
6201
  and either (a) not part of a [left-flanking delimiter run]
6191
6202
  or (b) part of a [left-flanking delimiter run]
@@ -6226,7 +6237,7 @@ the following principles resolve ambiguity:
6226
6237
  `<em><em>...</em></em>`.
6227
6238
 
6228
6239
  14. An interpretation `<em><strong>...</strong></em>` is always
6229
- preferred to `<strong><em>..</em></strong>`.
6240
+ preferred to `<strong><em>...</em></strong>`.
6230
6241
 
6231
6242
  15. When two potential emphasis or strong emphasis spans overlap,
6232
6243
  so that the second begins before the first ends and ends after
@@ -8605,11 +8616,11 @@ The link labels are case-insensitive:
8605
8616
  ````````````````````````````````
8606
8617
 
8607
8618
 
8608
- If you just want bracketed text, you can backslash-escape the
8609
- opening `!` and `[`:
8619
+ If you just want a literal `!` followed by bracketed text, you can
8620
+ backslash-escape the opening `[`:
8610
8621
 
8611
8622
  ```````````````````````````````` example
8612
- \!\[foo]
8623
+ !\[foo]
8613
8624
 
8614
8625
  [foo]: /url "title"
8615
8626
  .
@@ -1,20 +1,19 @@
1
1
  FROM debian:jessie
2
2
 
3
3
  RUN apt-get update && apt-get install -y \
4
- build-essential autoconf libtool \
4
+ build-essential \
5
+ autoconf \
6
+ libtool \
5
7
  git \
6
8
  pkg-config \
7
- && apt-get clean
8
-
9
- RUN apt-get install -y \
10
- cmake \
11
9
  gdb \
12
10
  valgrind \
13
- python3
14
-
15
- RUN apt-get install -y \
11
+ python3 \
16
12
  wget \
17
- clang
13
+ clang \
14
+ man \
15
+ clang-format-3.5 \
16
+ && apt-get clean
18
17
 
19
18
  RUN wget http://lcamtuf.coredump.cx/afl/releases/afl-latest.tgz && \
20
19
  tar xf afl-latest.tgz && \
@@ -23,8 +22,6 @@ RUN wget http://lcamtuf.coredump.cx/afl/releases/afl-latest.tgz && \
23
22
  cd .. && \
24
23
  rm -rf afl-*
25
24
 
26
- RUN apt-get install -y man
27
-
28
25
  RUN wget https://github.com/skvadrik/re2c/releases/download/0.15.3/re2c-0.15.3.tar.gz && \
29
26
  tar xf re2c-0.15.3.tar.gz && \
30
27
  cd re2c-* && \
@@ -33,4 +30,10 @@ RUN wget https://github.com/skvadrik/re2c/releases/download/0.15.3/re2c-0.15.3.t
33
30
  cd .. && \
34
31
  rm -rf re2c-*
35
32
 
36
- RUN apt-get install -y clang-format-3.5
33
+ RUN wget https://cmake.org/files/v3.8/cmake-3.8.2.tar.gz && \
34
+ tar xf cmake-3.8.2.tar.gz && \
35
+ cd cmake-* && \
36
+ ./bootstrap && \
37
+ make install && \
38
+ cd .. && \
39
+ rm -rf cmake-*
@@ -1,3 +1,3 @@
1
1
  module CommonMarker
2
- VERSION = '0.16.4'.freeze
2
+ VERSION = '0.16.5'.freeze
3
3
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: commonmarker
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.16.4
4
+ version: 0.16.5
5
5
  platform: ruby
6
6
  authors:
7
7
  - Garen Torikian
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2017-06-27 00:00:00.000000000 Z
12
+ date: 2017-06-30 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: ruby-enum
@@ -238,63 +238,17 @@ files:
238
238
  - ext/commonmarker/cmark/src/xml.c
239
239
  - ext/commonmarker/cmark/suppressions
240
240
  - ext/commonmarker/cmark/test/CMakeLists.txt
241
- - ext/commonmarker/cmark/test/afl_dictionary/asterisk
242
- - ext/commonmarker/cmark/test/afl_dictionary/attr_generic
243
- - ext/commonmarker/cmark/test/afl_dictionary/attr_href
244
- - ext/commonmarker/cmark/test/afl_dictionary/attr_xml_lang
245
- - ext/commonmarker/cmark/test/afl_dictionary/attr_xmlns
246
- - ext/commonmarker/cmark/test/afl_dictionary/backslash
247
- - ext/commonmarker/cmark/test/afl_dictionary/backtick
248
- - ext/commonmarker/cmark/test/afl_dictionary/colon
249
- - ext/commonmarker/cmark/test/afl_dictionary/dashes
250
- - ext/commonmarker/cmark/test/afl_dictionary/double_quote
251
- - ext/commonmarker/cmark/test/afl_dictionary/entity_builtin
252
- - ext/commonmarker/cmark/test/afl_dictionary/entity_decimal
253
- - ext/commonmarker/cmark/test/afl_dictionary/entity_external
254
- - ext/commonmarker/cmark/test/afl_dictionary/entity_hex
255
- - ext/commonmarker/cmark/test/afl_dictionary/equals
256
- - ext/commonmarker/cmark/test/afl_dictionary/exclamation
257
- - ext/commonmarker/cmark/test/afl_dictionary/greater_than
258
- - ext/commonmarker/cmark/test/afl_dictionary/hash
259
- - ext/commonmarker/cmark/test/afl_dictionary/hyphen
260
- - ext/commonmarker/cmark/test/afl_dictionary/indent
261
- - ext/commonmarker/cmark/test/afl_dictionary/left_bracket
262
- - ext/commonmarker/cmark/test/afl_dictionary/left_paren
263
- - ext/commonmarker/cmark/test/afl_dictionary/less_than
264
- - ext/commonmarker/cmark/test/afl_dictionary/plus
265
- - ext/commonmarker/cmark/test/afl_dictionary/right_bracket
266
- - ext/commonmarker/cmark/test/afl_dictionary/right_paren
267
- - ext/commonmarker/cmark/test/afl_dictionary/single_quote
268
- - ext/commonmarker/cmark/test/afl_dictionary/string_any
269
- - ext/commonmarker/cmark/test/afl_dictionary/string_brackets
270
- - ext/commonmarker/cmark/test/afl_dictionary/string_cdata
271
- - ext/commonmarker/cmark/test/afl_dictionary/string_dashes
272
- - ext/commonmarker/cmark/test/afl_dictionary/string_empty_dblquotes
273
- - ext/commonmarker/cmark/test/afl_dictionary/string_empty_quotes
274
- - ext/commonmarker/cmark/test/afl_dictionary/string_idrefs
275
- - ext/commonmarker/cmark/test/afl_dictionary/string_parentheses
276
- - ext/commonmarker/cmark/test/afl_dictionary/string_pcdata
277
- - ext/commonmarker/cmark/test/afl_dictionary/tag_cdata
278
- - ext/commonmarker/cmark/test/afl_dictionary/tag_close
279
- - ext/commonmarker/cmark/test/afl_dictionary/tag_doctype
280
- - ext/commonmarker/cmark/test/afl_dictionary/tag_element
281
- - ext/commonmarker/cmark/test/afl_dictionary/tag_entity
282
- - ext/commonmarker/cmark/test/afl_dictionary/tag_notation
283
- - ext/commonmarker/cmark/test/afl_dictionary/tag_open
284
- - ext/commonmarker/cmark/test/afl_dictionary/tag_open_close
285
- - ext/commonmarker/cmark/test/afl_dictionary/tag_open_exclamation
286
- - ext/commonmarker/cmark/test/afl_dictionary/tag_open_q
287
- - ext/commonmarker/cmark/test/afl_dictionary/tag_sq2_close
288
- - ext/commonmarker/cmark/test/afl_dictionary/tag_xml_q
289
- - ext/commonmarker/cmark/test/afl_dictionary/underscore
290
241
  - ext/commonmarker/cmark/test/afl_test_cases/test.md
242
+ - ext/commonmarker/cmark/test/cmark-fuzz.c
291
243
  - ext/commonmarker/cmark/test/cmark.py
292
244
  - ext/commonmarker/cmark/test/entity_tests.py
293
245
  - ext/commonmarker/cmark/test/extensions.txt
246
+ - ext/commonmarker/cmark/test/fuzzing_dictionary
294
247
  - ext/commonmarker/cmark/test/normalize.py
295
248
  - ext/commonmarker/cmark/test/pathological_tests.py
296
249
  - ext/commonmarker/cmark/test/regression.txt
297
250
  - ext/commonmarker/cmark/test/roundtrip_tests.py
251
+ - ext/commonmarker/cmark/test/run-cmark-fuzz
298
252
  - ext/commonmarker/cmark/test/smart_punct.txt
299
253
  - ext/commonmarker/cmark/test/spec.txt
300
254
  - ext/commonmarker/cmark/test/spec_tests.py
@@ -1 +0,0 @@
1
- href="1"
@@ -1 +0,0 @@
1
- xml:lang="1"
@@ -1 +0,0 @@
1
- xmlns="1"
File without changes
@@ -1 +0,0 @@
1
- <![CDATA[
@@ -1 +0,0 @@
1
- <!DOCTYPE
@@ -1 +0,0 @@
1
- <!ELEMENT
@@ -1 +0,0 @@
1
- <!ENTITY
@@ -1 +0,0 @@
1
- <!NOTATION
@@ -1 +0,0 @@
1
- <?xml?>