cmark

My personal build of CMark ✏️

Commit
41b8c5b3a4c46d3c2beb1dae6e170c295c19b198
Parent
2365a559d0bc9e6a212e1a1a3ab919b12e3c5e90
Author
John MacFarlane <jgm@berkeley.edu>
Date

Removed check for same mem allocator in S_can_contain.

This is too strict, as it prevents the use of dynamically loaded extensions: see https://github.com/jgm/cmark/pull/123#discussion_r67231518.

Documented in man page and public header that one should use the same memory allocator for every node in a tree.

Diffstat

2 files changed, 2 insertions, 4 deletions

Status File Name N° Changes Insertions Deletions
Modified src/cmark.h 3 2 1
Modified src/node.c 3 0 3
diff --git a/src/cmark.h b/src/cmark.h
@@ -112,7 +112,8 @@ typedef struct cmark_mem {
 CMARK_EXPORT cmark_node *cmark_node_new(cmark_node_type type);
 
 /** Same as `cmark_node_new`, but explicitly listing the memory
- * allocator used to allocate the node
+ * allocator used to allocate the node.  Note:  be sure to use the same
+ * allocator for every node in a tree, or bad things can happen.
  */
 CMARK_EXPORT cmark_node *cmark_node_new_with_mem(cmark_node_type type, cmark_mem *mem);
 
diff --git a/src/node.c b/src/node.c
@@ -30,9 +30,6 @@ static bool S_can_contain(cmark_node *node, cmark_node *child) {
   if (node == NULL || child == NULL) {
     return false;
   }
-  if (NODE_MEM(node) != NODE_MEM(child)) {
-    return 0;
-  }
 
   // Verify that child is not an ancestor of node or equal to node.
   cur = node;