Skip to content

Commit 6c70377

Browse files
Merge pull request swiftlang#55 from apple/revert-53-revert-51-QuietMisdreavus/gfm.11
Un-revert swiftlang#51 and fix Windows build errors
2 parents b6dedd1 + 0ab6fe8 commit 6c70377

30 files changed

+419
-225
lines changed

CMakeLists.txt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ project(cmark-gfm)
44
set(PROJECT_VERSION_MAJOR 0)
55
set(PROJECT_VERSION_MINOR 29)
66
set(PROJECT_VERSION_PATCH 0)
7-
set(PROJECT_VERSION_GFM 6)
7+
set(PROJECT_VERSION_GFM 11)
88
set(PROJECT_VERSION ${PROJECT_VERSION_MAJOR}.${PROJECT_VERSION_MINOR}.${PROJECT_VERSION_PATCH}.gfm.${PROJECT_VERSION_GFM})
99

1010
include("FindAsan.cmake")

api_test/main.c

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1575,6 +1575,7 @@ int main() {
15751575
int retval;
15761576
test_batch_runner *runner = test_batch_runner_new();
15771577

1578+
cmark_enable_safety_checks(true);
15781579
version(runner);
15791580
constructor(runner);
15801581
accessors(runner);

changelog.txt

Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,44 @@
1+
[0.29.0.gfm.11]
2+
3+
* Improved fixes for polynomial time complexity issues per
4+
https://github.com/github/cmark-gfm/security/advisories/GHSA-66g8-4hjf-77xh
5+
(#323, #324)
6+
* Added fuzzing target for bracketed patterns (#318)
7+
* Fixed bug in list numbering introduced in
8+
763587e8775350b8cb4a2aa0f4cec3685aa96e8b (#322) which caused list numbers
9+
to increment by 2
10+
* Fixed strict prototype clang warning (#310)
11+
* Fixed regression test (#312)
12+
* Added additional output formats to quadratic fuzzer (#327)
13+
* Fixed buffer overflow in fuzzing harness (#326)
14+
15+
Note: these changes may lead to minor changes in expected output on plaintext
16+
rendering of list items. Notably, blank lines may no longer delineate the start
17+
of a list when rendering to plaintext due to changes in how the tight list status
18+
is calculated.
19+
20+
[0.29.0.gfm.10]
21+
22+
* Fixed polynomial time complexity issue per
23+
https://github.com/github/cmark-gfm/security/advisories/GHSA-r8vr-c48j-fcc5
24+
* Fixed polynomial time complexity issues per
25+
https://github.com/github/cmark-gfm/security/advisories/GHSA-66g8-4hjf-77xh
26+
27+
Note: these changes remove redundant bold tag nesting which may result
28+
in existing rendering tests failing, e.g. rendering "____bold____" to html
29+
will no longer yield "<p><strong><strong>bold</strong></strong></p>".
30+
31+
[0.29.0.gfm.9]
32+
33+
* Cleanup: Use of a private header was cleaned up (#248)
34+
* Cleanup: Man page was updated (#255)
35+
* Cleanup: Warnings for -Wstrict-prototypes were cleaned up (#285)
36+
* Cleanup: We avoid header duplication (#289)
37+
38+
* We now store positioning info for url_match (#201)
39+
* We now expose cmark_parent_footnote_def for non-C renderers (#254)
40+
* Footnote aria-label text now reference the specific footnote backref, and we include a data-footnote-backref-idx attribute so the label can be internationalized in a downstream filter (#307)
41+
142
[0.29.0.gfm.8]
243

344
* We restored backwards compatibility by deprecating the `cmark_init_standard_node_flags()` requirement, which is now a noop (#305)

extensions/CMakeLists.txt

Lines changed: 1 addition & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -17,8 +17,6 @@ include_directories(
1717
${PROJECT_BINARY_DIR}/src
1818
)
1919

20-
include (GenerateExportHeader)
21-
2220
include_directories(include ${CMAKE_CURRENT_BINARY_DIR})
2321

2422
set(CMAKE_C_FLAGS_PROFILE "${CMAKE_C_FLAGS_RELEASE} -pg")
@@ -29,6 +27,7 @@ if (CMARK_SHARED)
2927

3028
set_target_properties(${LIBRARY} PROPERTIES
3129
OUTPUT_NAME "cmark-gfm-extensions"
30+
DEFINE_SYMBOL "libcmark_gfm_EXPORTS"
3231
SOVERSION ${PROJECT_VERSION_MAJOR}.${PROJECT_VERSION_MINOR}.${PROJECT_VERSION_PATCH}.gfm.${PROJECT_VERSION_GFM}
3332
VERSION ${PROJECT_VERSION})
3433

@@ -38,9 +37,6 @@ if (CMARK_SHARED)
3837
# Avoid name clash between PROGRAM and LIBRARY pdb files.
3938
set_target_properties(${LIBRARY} PROPERTIES PDB_NAME cmark-gfm-extensions_dll)
4039

41-
generate_export_header(${LIBRARY}
42-
BASE_NAME cmark-gfm-extensions)
43-
4440
list(APPEND CMARK_INSTALL ${LIBRARY})
4541
target_link_libraries(${LIBRARY} libcmark-gfm)
4642

@@ -63,11 +59,6 @@ if (CMARK_STATIC)
6359
VERSION ${PROJECT_VERSION})
6460
endif(MSVC)
6561

66-
if (NOT CMARK_SHARED)
67-
generate_export_header(${STATICLIBRARY}
68-
BASE_NAME cmark-gfm-extensions)
69-
endif()
70-
7162
list(APPEND CMARK_INSTALL ${STATICLIBRARY})
7263
endif()
7364

@@ -84,7 +75,6 @@ install(TARGETS ${CMARK_INSTALL}
8475
if (CMARK_SHARED OR CMARK_STATIC)
8576
install(FILES
8677
${CMAKE_CURRENT_SOURCE_DIR}/include/cmark-gfm-core-extensions.h
87-
${CMAKE_CURRENT_SOURCE_DIR}/include/extensions-export.h
8878
DESTINATION include
8979
)
9080

extensions/autolink.c

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -267,6 +267,11 @@ static cmark_node *url_match(cmark_parser *parser, cmark_node *parent,
267267
cmark_node *text = cmark_node_new_with_mem(CMARK_NODE_TEXT, parser->mem);
268268
text->as.literal = url;
269269
cmark_node_append_child(node, text);
270+
271+
node->start_line = text->start_line = node->end_line = text->end_line = cmark_inline_parser_get_line(inline_parser);
272+
273+
node->start_column = text->start_column = max_rewind - rewind;
274+
node->end_column = text->end_column = cmark_inline_parser_get_column(inline_parser) - 1;
270275

271276
return node;
272277
}

extensions/core-extensions.c

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@ static void register_plugins(void) {
2525
cmark_register_plugin(core_extensions_registration);
2626
}
2727

28+
CMARK_GFM_EXPORT
2829
void cmark_gfm_core_extensions_ensure_registered(void) {
2930
CMARK_RUN_ONCE(registered, register_plugins);
3031
}

extensions/include/cmark-gfm-core-extensions.h

Lines changed: 15 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -6,40 +6,40 @@ extern "C" {
66
#endif
77

88
#include "cmark-gfm-extension_api.h"
9-
#include "extensions-export.h"
10-
#include "cmark-gfm_config.h" // for bool
9+
#include "export.h"
10+
#include <stdbool.h>
1111
#include <stdint.h>
1212

13-
CMARK_GFM_EXTENSIONS_EXPORT
13+
CMARK_GFM_EXPORT
1414
void cmark_gfm_core_extensions_ensure_registered(void);
1515

16-
CMARK_GFM_EXTENSIONS_EXPORT
16+
CMARK_GFM_EXPORT
1717
uint16_t cmark_gfm_extensions_get_table_columns(cmark_node *node);
1818

1919
/** Sets the number of columns for the table, returning 1 on success and 0 on error.
2020
*/
21-
CMARK_GFM_EXTENSIONS_EXPORT
21+
CMARK_GFM_EXPORT
2222
int cmark_gfm_extensions_set_table_columns(cmark_node *node, uint16_t n_columns);
2323

24-
CMARK_GFM_EXTENSIONS_EXPORT
24+
CMARK_GFM_EXPORT
2525
uint8_t *cmark_gfm_extensions_get_table_alignments(cmark_node *node);
2626

2727
/** Sets the alignments for the table, returning 1 on success and 0 on error.
2828
*/
29-
CMARK_GFM_EXTENSIONS_EXPORT
29+
CMARK_GFM_EXPORT
3030
int cmark_gfm_extensions_set_table_alignments(cmark_node *node, uint16_t ncols, uint8_t *alignments);
3131

32-
CMARK_GFM_EXTENSIONS_EXPORT
32+
CMARK_GFM_EXPORT
3333
int cmark_gfm_extensions_get_table_row_is_header(cmark_node *node);
3434

3535
/** Sets the column span for the table cell, returning 1 on success and 0 on error.
3636
*/
37-
CMARK_GFM_EXTENSIONS_EXPORT
37+
CMARK_GFM_EXPORT
3838
int cmark_gfm_extensions_set_table_cell_colspan(cmark_node *node, unsigned colspan);
3939

4040
/** Sets the row span for the table cell, returning 1 on success and 0 on error.
4141
*/
42-
CMARK_GFM_EXTENSIONS_EXPORT
42+
CMARK_GFM_EXPORT
4343
int cmark_gfm_extensions_set_table_cell_rowspan(cmark_node *node, unsigned rowspan);
4444

4545
/**
@@ -50,7 +50,7 @@ int cmark_gfm_extensions_set_table_cell_rowspan(cmark_node *node, unsigned rowsp
5050
5151
Column span is only parsed when \c CMARK_OPT_TABLE_SPANS is set.
5252
*/
53-
CMARK_GFM_EXTENSIONS_EXPORT
53+
CMARK_GFM_EXPORT
5454
unsigned cmark_gfm_extensions_get_table_cell_colspan(cmark_node *node);
5555

5656
/**
@@ -61,22 +61,22 @@ unsigned cmark_gfm_extensions_get_table_cell_colspan(cmark_node *node);
6161
6262
Row span is only parsed when \c CMARK_OPT_TABLE_SPANS is set.
6363
*/
64-
CMARK_GFM_EXTENSIONS_EXPORT
64+
CMARK_GFM_EXPORT
6565
unsigned cmark_gfm_extensions_get_table_cell_rowspan(cmark_node *node);
6666

6767
/** Sets whether the node is a table header row, returning 1 on success and 0 on error.
6868
*/
69-
CMARK_GFM_EXTENSIONS_EXPORT
69+
CMARK_GFM_EXPORT
7070
int cmark_gfm_extensions_set_table_row_is_header(cmark_node *node, int is_header);
7171

72-
CMARK_GFM_EXTENSIONS_EXPORT
72+
CMARK_GFM_EXPORT
7373
bool cmark_gfm_extensions_get_tasklist_item_checked(cmark_node *node);
7474
/* For backwards compatibility */
7575
#define cmark_gfm_extensions_tasklist_is_checked cmark_gfm_extensions_get_tasklist_item_checked
7676

7777
/** Sets whether a tasklist item is "checked" (completed), returning 1 on success and 0 on error.
7878
*/
79-
CMARK_GFM_EXTENSIONS_EXPORT
79+
CMARK_GFM_EXPORT
8080
int cmark_gfm_extensions_set_tasklist_item_checked(cmark_node *node, bool is_checked);
8181

8282
#ifdef __cplusplus

extensions/include/extensions-export.h

Lines changed: 0 additions & 60 deletions
This file was deleted.

extensions/table.c

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -387,7 +387,7 @@ static cmark_node *try_opening_table_header(cmark_syntax_extension *self,
387387
if (!marker_row) {
388388
return parent_container;
389389
}
390-
390+
391391
assert(marker_row);
392392

393393
cmark_arena_push();
@@ -1029,30 +1029,35 @@ cmark_syntax_extension *create_table_extension(void) {
10291029
return self;
10301030
}
10311031

1032+
CMARK_GFM_EXPORT
10321033
uint16_t cmark_gfm_extensions_get_table_columns(cmark_node *node) {
10331034
if (node->type != CMARK_NODE_TABLE)
10341035
return 0;
10351036

10361037
return ((node_table *)node->as.opaque)->n_columns;
10371038
}
10381039

1040+
CMARK_GFM_EXPORT
10391041
uint8_t *cmark_gfm_extensions_get_table_alignments(cmark_node *node) {
10401042
if (node->type != CMARK_NODE_TABLE)
10411043
return 0;
10421044

10431045
return ((node_table *)node->as.opaque)->alignments;
10441046
}
10451047

1048+
CMARK_GFM_EXPORT
10461049
int cmark_gfm_extensions_set_table_columns(cmark_node *node, uint16_t n_columns) {
10471050
return set_n_table_columns(node, n_columns);
10481051
}
10491052

1053+
CMARK_GFM_EXPORT
10501054
int cmark_gfm_extensions_set_table_alignments(cmark_node *node, uint16_t ncols, uint8_t *alignments) {
10511055
uint8_t *a = (uint8_t *)cmark_node_mem(node)->calloc(1, ncols);
10521056
memcpy(a, alignments, ncols);
10531057
return set_table_alignments(node, a);
10541058
}
10551059

1060+
CMARK_GFM_EXPORT
10561061
int cmark_gfm_extensions_get_table_row_is_header(cmark_node *node)
10571062
{
10581063
if (!node || node->type != CMARK_NODE_TABLE_ROW)
@@ -1061,6 +1066,7 @@ int cmark_gfm_extensions_get_table_row_is_header(cmark_node *node)
10611066
return ((node_table_row *)node->as.opaque)->is_header;
10621067
}
10631068

1069+
CMARK_GFM_EXPORT
10641070
int cmark_gfm_extensions_set_table_row_is_header(cmark_node *node, int is_header)
10651071
{
10661072
if (!node || node->type != CMARK_NODE_TABLE_ROW)
@@ -1070,21 +1076,25 @@ int cmark_gfm_extensions_set_table_row_is_header(cmark_node *node, int is_header
10701076
return 1;
10711077
}
10721078

1079+
CMARK_GFM_EXPORT
10731080
unsigned cmark_gfm_extensions_get_table_cell_colspan(cmark_node *node)
10741081
{
10751082
return get_cell_colspan(node);
10761083
}
10771084

1085+
CMARK_GFM_EXPORT
10781086
unsigned cmark_gfm_extensions_get_table_cell_rowspan(cmark_node *node)
10791087
{
10801088
return get_cell_rowspan(node);
10811089
}
10821090

1091+
CMARK_GFM_EXPORT
10831092
int cmark_gfm_extensions_set_table_cell_colspan(cmark_node *node, unsigned colspan)
10841093
{
10851094
return set_cell_colspan(node, colspan);
10861095
}
10871096

1097+
CMARK_GFM_EXPORT
10881098
int cmark_gfm_extensions_set_table_cell_rowspan(cmark_node *node, unsigned rowspan)
10891099
{
10901100
return set_cell_rowspan(node, rowspan);

extensions/tasklist.c

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@ static const char *get_type_string(cmark_syntax_extension *extension, cmark_node
1818

1919

2020
// Return 1 if state was set, 0 otherwise
21+
CMARK_GFM_EXPORT
2122
int cmark_gfm_extensions_set_tasklist_item_checked(cmark_node *node, bool is_checked) {
2223
// The node has to exist, and be an extension, and actually be the right type in order to get the value.
2324
if (!node || !node->extension || strcmp(cmark_node_get_type_string(node), TYPE_STRING))
@@ -27,6 +28,7 @@ int cmark_gfm_extensions_set_tasklist_item_checked(cmark_node *node, bool is_che
2728
return 1;
2829
}
2930

31+
CMARK_GFM_EXPORT
3032
bool cmark_gfm_extensions_get_tasklist_item_checked(cmark_node *node) {
3133
if (!node || !node->extension || strcmp(cmark_node_get_type_string(node), TYPE_STRING))
3234
return false;

0 commit comments

Comments
 (0)