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: 3831ae7665e14681344f9cefb50e6e79200087a6
4
- data.tar.gz: 937ba73e3f900097378ebcad059368fb8f27071f
3
+ metadata.gz: a6d4aa63cc2e20379e7fc57e8fafd87fc0d3d004
4
+ data.tar.gz: 7bb2af43330702e69f2aede9b9f6442d88e61e85
5
5
  SHA512:
6
- metadata.gz: a06a81a340b669d47db95c45455cdc0f65d7a216e8efdd2d455232f41facb3c8d30a72f651215947234550005ee3ea3dcd7a3b726e39ee24f35cf1b9e892e3c2
7
- data.tar.gz: 935bc17d51a5223eba52beac774af9346fef6e7b1ede3a58cf7734992fc9e173eb3b1f5d8e50fff914f874ec6c4f537d83018a1ff5747367f9da4c01831edbc2
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
- goto done;
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
- goto done;
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
- goto done;
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
- goto done;
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
- done:
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
@@ -1,3 +1,3 @@
1
1
  module CommonMarker
2
- VERSION = '0.14.13'.freeze
2
+ VERSION = '0.14.14'.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.14.13
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-26 00:00:00.000000000 Z
12
+ date: 2017-03-27 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: ruby-enum