summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJohn MacFarlane <jgm@berkeley.edu>2016-06-23 13:28:41 -0700
committerJohn MacFarlane <jgm@berkeley.edu>2016-06-23 13:29:06 -0700
commit41b8c5b3a4c46d3c2beb1dae6e170c295c19b198 (patch)
tree928c6267fd9795c3f5ed998b18b2a50c674c6bd0
parent2365a559d0bc9e6a212e1a1a3ab919b12e3c5e90 (diff)
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.
-rw-r--r--src/cmark.h3
-rw-r--r--src/node.c3
2 files changed, 2 insertions, 4 deletions
diff --git a/src/cmark.h b/src/cmark.h
index 45d7bc3..3543c82 100644
--- 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
index 62acf14..e722acf 100644
--- 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;