commonmarker 0.17.0 → 0.17.1

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.

checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 78ee91668a78aaedd870bbaa8bf8e6cd551cadc9
4
- data.tar.gz: 2391e06fd9d4e7dff10c71b9750e5141e19c0516
3
+ metadata.gz: fd465d3c630c43a890eee8ec949fccf4eabb5997
4
+ data.tar.gz: e9932c4d91ef3479c9635276a634ce1da089b4b3
5
5
  SHA512:
6
- metadata.gz: 6df4d33c89c1a28d2d26f187ac1e54038dcfb0ecabb947d1437b48aeb49943e5896efce5adba324dc30d2e8b9d063be96a7c866d02f9849672e29b25b23c656a
7
- data.tar.gz: ea01b53f7f78cd0d4c0489beaee09cf9aa6dafb38d932aaae7211aa82100d717ae67580837c27721b9aa23134462b2b1f4feaac67b3d02db5ca880f4cbb40471
6
+ metadata.gz: 58d1456c8e6da1b8b7288303570acbe467daf61402965fca54f0bc2f9f4c922a4edc19c7be25743b702b8a7fd0b0911742935498918e9044ebedeb89fd5cdcb3
7
+ data.tar.gz: 0c9d4f55d0326a1bf9830aea8f98b917c2f4fd3ea828bdfbebfdb2dd9063841b538d61228d7ae3ac7dc02b411d6562029d89e78f3a260090e3023c0238bd75d9
@@ -19,7 +19,7 @@ set(PROJECT_NAME "cmark")
19
19
  set(PROJECT_VERSION_MAJOR 0)
20
20
  set(PROJECT_VERSION_MINOR 28)
21
21
  set(PROJECT_VERSION_PATCH 0)
22
- set(PROJECT_VERSION_GFM 8)
22
+ set(PROJECT_VERSION_GFM 9)
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)
@@ -934,176 +934,59 @@ static void test_feed_across_line_ending(test_batch_runner *runner) {
934
934
  cmark_node_free(document);
935
935
  }
936
936
 
937
- static void source_pos(test_batch_runner *runner) {
938
- static const char markdown[] =
939
- "# Hi *there*.\n"
940
- "\n"
941
- "Hello &ldquo; <http://www.google.com>\n"
942
- "there `hi` -- [okay](www.google.com (ok)).\n"
943
- "\n"
944
- "> 1. Okay.\n"
945
- "> Sure.\n"
946
- ">\n"
947
- "> 2. Yes, okay.\n"
948
- "> ![ok](hi \"yes\")\n";
949
-
950
- cmark_node *doc = cmark_parse_document(markdown, sizeof(markdown) - 1, CMARK_OPT_DEFAULT);
951
- char *xml = cmark_render_xml(doc, CMARK_OPT_DEFAULT | CMARK_OPT_SOURCEPOS);
952
- STR_EQ(runner, xml, "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n"
953
- "<!DOCTYPE document SYSTEM \"CommonMark.dtd\">\n"
954
- "<document sourcepos=\"1:1-10:20\" xmlns=\"http://commonmark.org/xml/1.0\">\n"
955
- " <heading sourcepos=\"1:1-1:13\" level=\"1\">\n"
956
- " <text sourcepos=\"1:3-1:5\">Hi </text>\n"
957
- " <emph sourcepos=\"1:6-1:12\">\n"
958
- " <text sourcepos=\"1:7-1:11\">there</text>\n"
959
- " </emph>\n"
960
- " <text sourcepos=\"1:13-1:13\">.</text>\n"
961
- " </heading>\n"
962
- " <paragraph sourcepos=\"3:1-4:42\">\n"
963
- " <text sourcepos=\"3:1-3:14\">Hello “ </text>\n"
964
- " <link sourcepos=\"3:15-3:37\" destination=\"http://www.google.com\" title=\"\">\n"
965
- " <text sourcepos=\"3:16-3:36\">http://www.google.com</text>\n"
966
- " </link>\n"
967
- " <softbreak />\n"
968
- " <text sourcepos=\"4:1-4:6\">there </text>\n"
969
- " <code sourcepos=\"4:8-4:9\">hi</code>\n"
970
- " <text sourcepos=\"4:11-4:14\"> -- </text>\n"
971
- " <link sourcepos=\"4:15-4:41\" destination=\"www.google.com\" title=\"ok\">\n"
972
- " <text sourcepos=\"4:16-4:19\">okay</text>\n"
973
- " </link>\n"
974
- " <text sourcepos=\"4:42-4:42\">.</text>\n"
975
- " </paragraph>\n"
976
- " <block_quote sourcepos=\"6:1-10:20\">\n"
977
- " <list sourcepos=\"6:3-10:20\" type=\"ordered\" start=\"1\" delim=\"period\" tight=\"false\">\n"
978
- " <item sourcepos=\"6:3-8:1\">\n"
979
- " <paragraph sourcepos=\"6:6-7:10\">\n"
980
- " <text sourcepos=\"6:6-6:10\">Okay.</text>\n"
981
- " <softbreak />\n"
982
- " <text sourcepos=\"7:6-7:10\">Sure.</text>\n"
983
- " </paragraph>\n"
984
- " </item>\n"
985
- " <item sourcepos=\"9:3-10:20\">\n"
986
- " <paragraph sourcepos=\"9:6-10:20\">\n"
987
- " <text sourcepos=\"9:6-9:15\">Yes, okay.</text>\n"
988
- " <softbreak />\n"
989
- " <image sourcepos=\"10:6-10:20\" destination=\"hi\" title=\"yes\">\n"
990
- " <text sourcepos=\"10:8-10:9\">ok</text>\n"
991
- " </image>\n"
992
- " </paragraph>\n"
993
- " </item>\n"
994
- " </list>\n"
995
- " </block_quote>\n"
996
- "</document>\n",
997
- "sourcepos are as expected");
998
- free(xml);
999
- cmark_node_free(doc);
1000
- }
1001
-
1002
- static void ext_source_pos(test_batch_runner *runner) {
1003
- static const char *extensions[3] = {
1004
- "strikethrough",
1005
- "table",
1006
- "autolink",
1007
- };
1008
-
1009
- static const char markdown[] =
1010
- "Hi ~~friend~~.\n"
1011
- "\n"
1012
- "> www.github.com\n"
1013
- "\n"
1014
- "1. | a | b | *c* |\n"
1015
- " | - | - | --: |\n"
1016
- " | 1 | 2 | ~3~ |\n";
1017
-
1018
- cmark_parser *parser = cmark_parser_new(CMARK_OPT_DEFAULT);
1019
- core_extensions_ensure_registered();
937
+ #if !defined(_WIN32) || defined(__CYGWIN__)
938
+ # include <sys/time.h>
939
+ static struct timeval _before, _after;
940
+ static int _timing;
941
+ # define START_TIMING() \
942
+ gettimeofday(&_before, NULL)
943
+
944
+ # define END_TIMING() \
945
+ do { \
946
+ gettimeofday(&_after, NULL); \
947
+ _timing = (_after.tv_sec - _before.tv_sec) * 1000 + (_after.tv_usec - _before.tv_usec) / 1000; \
948
+ } while (0)
949
+
950
+ # define TIMING _timing
951
+ #else
952
+ # define START_TIMING()
953
+ # define END_TIMING()
954
+ # define TIMING 0
955
+ #endif
956
+
957
+ static void test_pathological_regressions(test_batch_runner *runner) {
958
+ {
959
+ // I don't care what the output is, so long as it doesn't take too long.
960
+ char path[] = "[a](b";
961
+ char *input = (char *)calloc(1, (sizeof(path) - 1) * 50000);
962
+ for (int i = 0; i < 50000; ++i)
963
+ memcpy(input + i * (sizeof(path) - 1), path, sizeof(path) - 1);
964
+
965
+ START_TIMING();
966
+ char *html = cmark_markdown_to_html(input, (sizeof(path) - 1) * 50000,
967
+ CMARK_OPT_VALIDATE_UTF8);
968
+ END_TIMING();
969
+ free(html);
970
+ free(input);
1020
971
 
1021
- for (int i = 0; i < (int)(sizeof(extensions) / sizeof(*extensions)); ++i) {
1022
- cmark_syntax_extension *ext = cmark_find_syntax_extension(extensions[i]);
1023
- cmark_parser_attach_syntax_extension(parser, ext);
972
+ OK(runner, TIMING < 1000, "takes less than 1000ms to run");
1024
973
  }
1025
974
 
1026
- cmark_parser_feed(parser, markdown, sizeof(markdown) - 1);
1027
-
1028
- cmark_node *doc = cmark_parser_finish(parser);
1029
- char *xml = cmark_render_xml(doc, CMARK_OPT_DEFAULT | CMARK_OPT_SOURCEPOS);
1030
- STR_EQ(runner, xml, "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n"
1031
- "<!DOCTYPE document SYSTEM \"CommonMark.dtd\">\n"
1032
- "<document sourcepos=\"1:1-7:18\" xmlns=\"http://commonmark.org/xml/1.0\">\n"
1033
- " <paragraph sourcepos=\"1:1-1:14\">\n"
1034
- " <text sourcepos=\"1:1-1:3\">Hi </text>\n"
1035
- " <strikethrough sourcepos=\"1:4-1:13\">\n"
1036
- " <text sourcepos=\"1:6-1:11\">friend</text>\n"
1037
- " </strikethrough>\n"
1038
- " <text sourcepos=\"1:14-1:14\">.</text>\n"
1039
- " </paragraph>\n"
1040
- " <block_quote sourcepos=\"3:1-3:16\">\n"
1041
- " <paragraph sourcepos=\"3:3-3:16\">\n"
1042
- " <link sourcepos=\"3:2-3:16\" destination=\"http://www.github.com\" title=\"\">\n"
1043
- " <text sourcepos=\"3:2-3:16\">www.github.com</text>\n"
1044
- " </link>\n"
1045
- " </paragraph>\n"
1046
- " </block_quote>\n"
1047
- " <list sourcepos=\"5:1-7:18\" type=\"ordered\" start=\"1\" delim=\"period\" tight=\"true\">\n"
1048
- " <item sourcepos=\"5:1-7:18\">\n"
1049
- " <table sourcepos=\"5:4-7:18\">\n"
1050
- " <table_header sourcepos=\"5:4-5:18\">\n"
1051
- " <table_cell sourcepos=\"5:5-5:7\">\n"
1052
- " <text sourcepos=\"5:6-5:6\">a</text>\n"
1053
- " </table_cell>\n"
1054
- " <table_cell sourcepos=\"5:9-5:11\">\n"
1055
- " <text sourcepos=\"5:10-5:10\">b</text>\n"
1056
- " </table_cell>\n"
1057
- " <table_cell sourcepos=\"5:13-5:17\">\n"
1058
- " <emph sourcepos=\"5:14-5:16\">\n"
1059
- " <text sourcepos=\"5:15-5:15\">c</text>\n"
1060
- " </emph>\n"
1061
- " </table_cell>\n"
1062
- " </table_header>\n"
1063
- " <table_row sourcepos=\"7:4-7:18\">\n"
1064
- " <table_cell sourcepos=\"7:5-7:7\">\n"
1065
- " <text sourcepos=\"7:6-7:6\">1</text>\n"
1066
- " </table_cell>\n"
1067
- " <table_cell sourcepos=\"7:9-7:11\">\n"
1068
- " <text sourcepos=\"7:10-7:10\">2</text>\n"
1069
- " </table_cell>\n"
1070
- " <table_cell sourcepos=\"7:13-7:17\">\n"
1071
- " <strikethrough sourcepos=\"7:14-7:16\">\n"
1072
- " <text sourcepos=\"7:15-7:15\">3</text>\n"
1073
- " </strikethrough>\n"
1074
- " </table_cell>\n"
1075
- " </table_row>\n"
1076
- " </table>\n"
1077
- " </item>\n"
1078
- " </list>\n"
1079
- "</document>\n",
1080
- "sourcepos are as expected");
1081
- free(xml);
1082
- cmark_node_free(doc);
1083
- }
975
+ {
976
+ char path[] = "[a](<b";
977
+ char *input = (char *)calloc(1, (sizeof(path) - 1) * 50000);
978
+ for (int i = 0; i < 50000; ++i)
979
+ memcpy(input + i * (sizeof(path) - 1), path, sizeof(path) - 1);
1084
980
 
1085
- static void ref_source_pos(test_batch_runner *runner) {
1086
- static const char markdown[] =
1087
- "Let's try [reference] links.\n"
1088
- "\n"
1089
- "[reference]: https://github.com (GitHub)\n";
981
+ START_TIMING();
982
+ char *html = cmark_markdown_to_html(input, (sizeof(path) - 1) * 50000,
983
+ CMARK_OPT_VALIDATE_UTF8);
984
+ END_TIMING();
985
+ free(html);
986
+ free(input);
1090
987
 
1091
- cmark_node *doc = cmark_parse_document(markdown, sizeof(markdown) - 1, CMARK_OPT_DEFAULT);
1092
- char *xml = cmark_render_xml(doc, CMARK_OPT_DEFAULT | CMARK_OPT_SOURCEPOS);
1093
- STR_EQ(runner, xml, "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n"
1094
- "<!DOCTYPE document SYSTEM \"CommonMark.dtd\">\n"
1095
- "<document sourcepos=\"1:1-3:40\" xmlns=\"http://commonmark.org/xml/1.0\">\n"
1096
- " <paragraph sourcepos=\"1:1-1:28\">\n"
1097
- " <text sourcepos=\"1:1-1:10\">Let's try </text>\n"
1098
- " <link sourcepos=\"1:11-1:21\" destination=\"https://github.com\" title=\"GitHub\">\n"
1099
- " <text sourcepos=\"1:12-1:20\">reference</text>\n"
1100
- " </link>\n"
1101
- " <text sourcepos=\"1:22-1:28\"> links.</text>\n"
1102
- " </paragraph>\n"
1103
- "</document>\n",
1104
- "sourcepos are as expected");
1105
- free(xml);
1106
- cmark_node_free(doc);
988
+ OK(runner, TIMING < 1000, "takes less than 1000ms to run");
989
+ }
1107
990
  }
1108
991
 
1109
992
  int main() {
@@ -1132,9 +1015,7 @@ int main() {
1132
1015
  test_cplusplus(runner);
1133
1016
  test_safe(runner);
1134
1017
  test_feed_across_line_ending(runner);
1135
- source_pos(runner);
1136
- ext_source_pos(runner);
1137
- ref_source_pos(runner);
1018
+ test_pathological_regressions(runner);
1138
1019
 
1139
1020
  test_print_summary(runner);
1140
1021
  retval = test_ok(runner) ? 0 : 1;
@@ -1,3 +1,7 @@
1
+ [0.28.0.gfm.9]
2
+
3
+ * Fix denial of service parsing nested links (#49).
4
+
1
5
  [0.28.0.gfm.8]
2
6
 
3
7
  * Fix bug where autolink would cause `:` to be skipped in emphasis
@@ -119,7 +119,7 @@ static cmark_chunk chunk_clone(cmark_mem *mem, cmark_chunk *src) {
119
119
  c.data = (unsigned char *)mem->calloc(len + 1, 1);
120
120
  c.alloc = 1;
121
121
  if (len)
122
- memcpy(c.data, src->data, len);
122
+ memcpy(c.data, src->data, len);
123
123
  c.data[len] = '\0';
124
124
 
125
125
  return c;
@@ -1,3 +1,3 @@
1
1
  module CommonMarker
2
- VERSION = '0.17.0'.freeze
2
+ VERSION = '0.17.1'.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.17.0
4
+ version: 0.17.1
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-08-25 00:00:00.000000000 Z
12
+ date: 2017-09-06 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: ruby-enum