commonmarker 0.14.13 → 0.14.14
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:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: a6d4aa63cc2e20379e7fc57e8fafd87fc0d3d004
|
4
|
+
data.tar.gz: 7bb2af43330702e69f2aede9b9f6442d88e61e85
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 47615b3ee50b0213f9113a8d305e1697d1d7551551e43796077099146952156e3fdb837da704b69e1a8ed0aee6ba7a16933ad68556a7659b2e06f1a064513632
|
7
|
+
data.tar.gz: f7b3761ee08eecbe5d365bf07340a560b8117b398028d2fa7a414bace3792f86bb6c13c44a757a2973ac5e08b12a28ffb4ccada7c5c75b38a0857d4c0a0196db
|
@@ -1,3 +1,4 @@
|
|
1
|
+
#include <cmark_extension_api.h>
|
1
2
|
#include <html.h>
|
2
3
|
#include <inlines.h>
|
3
4
|
#include <parser.h>
|
@@ -253,15 +254,19 @@ static cmark_node *try_opening_table_header(cmark_syntax_extension *self,
|
|
253
254
|
uint16_t i;
|
254
255
|
|
255
256
|
if (!matched)
|
256
|
-
|
257
|
+
return parent_container;
|
257
258
|
|
258
259
|
parent_string = cmark_node_get_string_content(parent_container);
|
259
260
|
|
261
|
+
cmark_arena_push();
|
262
|
+
|
260
263
|
header_row = row_from_string(self, parser, (unsigned char *)parent_string,
|
261
264
|
(int)strlen(parent_string));
|
262
265
|
|
263
266
|
if (!header_row) {
|
264
|
-
|
267
|
+
free_table_row(parser->mem, header_row);
|
268
|
+
cmark_arena_pop();
|
269
|
+
return parent_container;
|
265
270
|
}
|
266
271
|
|
267
272
|
marker_row = row_from_string(self, parser,
|
@@ -271,11 +276,24 @@ static cmark_node *try_opening_table_header(cmark_syntax_extension *self,
|
|
271
276
|
assert(marker_row);
|
272
277
|
|
273
278
|
if (header_row->n_columns != marker_row->n_columns) {
|
274
|
-
|
279
|
+
free_table_row(parser->mem, header_row);
|
280
|
+
free_table_row(parser->mem, marker_row);
|
281
|
+
cmark_arena_pop();
|
282
|
+
return parent_container;
|
283
|
+
}
|
284
|
+
|
285
|
+
if (cmark_arena_pop()) {
|
286
|
+
header_row = row_from_string(self, parser, (unsigned char *)parent_string,
|
287
|
+
(int)strlen(parent_string));
|
288
|
+
marker_row = row_from_string(self, parser,
|
289
|
+
input + cmark_parser_get_first_nonspace(parser),
|
290
|
+
len - cmark_parser_get_first_nonspace(parser));
|
275
291
|
}
|
276
292
|
|
277
293
|
if (!cmark_node_set_type(parent_container, CMARK_NODE_TABLE)) {
|
278
|
-
|
294
|
+
free_table_row(parser->mem, header_row);
|
295
|
+
free_table_row(parser->mem, marker_row);
|
296
|
+
return parent_container;
|
279
297
|
}
|
280
298
|
|
281
299
|
cmark_node_set_syntax_extension(parent_container, self);
|
@@ -325,7 +343,7 @@ static cmark_node *try_opening_table_header(cmark_syntax_extension *self,
|
|
325
343
|
cmark_parser_advance_offset(
|
326
344
|
parser, (char *)input,
|
327
345
|
(int)strlen((char *)input) - 1 - cmark_parser_get_offset(parser), false);
|
328
|
-
|
346
|
+
|
329
347
|
free_table_row(parser->mem, header_row);
|
330
348
|
free_table_row(parser->mem, marker_row);
|
331
349
|
return parent_container;
|
@@ -379,12 +397,14 @@ static int matches(cmark_syntax_extension *self, cmark_parser *parser,
|
|
379
397
|
int res = 0;
|
380
398
|
|
381
399
|
if (cmark_node_get_type(parent_container) == CMARK_NODE_TABLE) {
|
400
|
+
cmark_arena_push();
|
382
401
|
table_row *new_row = row_from_string(
|
383
402
|
self, parser, input + cmark_parser_get_first_nonspace(parser),
|
384
403
|
len - cmark_parser_get_first_nonspace(parser));
|
385
404
|
if (new_row && new_row->n_columns)
|
386
405
|
res = 1;
|
387
406
|
free_table_row(parser->mem, new_row);
|
407
|
+
cmark_arena_pop();
|
388
408
|
}
|
389
409
|
|
390
410
|
return res;
|
@@ -2,9 +2,11 @@
|
|
2
2
|
#include <string.h>
|
3
3
|
#include <stdint.h>
|
4
4
|
#include "cmark.h"
|
5
|
+
#include "cmark_extension_api.h"
|
5
6
|
|
6
7
|
static struct arena_chunk {
|
7
8
|
size_t sz, used;
|
9
|
+
uint8_t push_point;
|
8
10
|
void *ptr;
|
9
11
|
struct arena_chunk *prev;
|
10
12
|
} *A = NULL;
|
@@ -21,6 +23,27 @@ static struct arena_chunk *alloc_arena_chunk(size_t sz, struct arena_chunk *prev
|
|
21
23
|
return c;
|
22
24
|
}
|
23
25
|
|
26
|
+
void cmark_arena_push(void) {
|
27
|
+
if (!A)
|
28
|
+
return;
|
29
|
+
A->push_point = 1;
|
30
|
+
A = alloc_arena_chunk(10240, A);
|
31
|
+
}
|
32
|
+
|
33
|
+
int cmark_arena_pop(void) {
|
34
|
+
if (!A)
|
35
|
+
return 0;
|
36
|
+
while (A && !A->push_point) {
|
37
|
+
free(A->ptr);
|
38
|
+
struct arena_chunk *n = A->prev;
|
39
|
+
free(A);
|
40
|
+
A = n;
|
41
|
+
}
|
42
|
+
if (A)
|
43
|
+
A->push_point = 0;
|
44
|
+
return 1;
|
45
|
+
}
|
46
|
+
|
24
47
|
static void init_arena(void) {
|
25
48
|
A = alloc_arena_chunk(4 * 1048576, NULL);
|
26
49
|
}
|
@@ -686,6 +686,12 @@ void cmark_manage_extensions_special_characters(cmark_parser *parser, bool add);
|
|
686
686
|
CMARK_EXPORT
|
687
687
|
cmark_llist *cmark_parser_get_syntax_extensions(cmark_parser *parser);
|
688
688
|
|
689
|
+
CMARK_EXPORT
|
690
|
+
void cmark_arena_push(void);
|
691
|
+
|
692
|
+
CMARK_EXPORT
|
693
|
+
int cmark_arena_pop(void);
|
694
|
+
|
689
695
|
#ifdef __cplusplus
|
690
696
|
}
|
691
697
|
#endif
|
data/lib/commonmarker/version.rb
CHANGED
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.14.
|
4
|
+
version: 0.14.14
|
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-03-
|
12
|
+
date: 2017-03-27 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: ruby-enum
|