diff --git a/tree.c b/tree.c
index cc8d2a85ae4b2d59c89eeb9bc546eb3e0be14064_dHJlZS5j..3fe73b8a3bb36ac30a3c4eb3d3d69d6ae453614c_dHJlZS5j 100644
--- a/tree.c
+++ b/tree.c
@@ -18,6 +18,7 @@
 #define IN_LIBXML
 #include "libxml.h"
 
+#include <assert.h>
 #include <string.h> /* for memset() only ! */
 #include <stddef.h>
 #include <limits.h>
@@ -2850,6 +2851,10 @@
                     xmlRemoveID(tree->doc, prop);
                 }
 
+#ifdef FUZZING_BUILD_MODE_UNSAFE_FOR_PRODUCTION
+                if (prop->doc)
+                    assert(xmlDictOwns(prop->doc->dict, prop->name) != 1);
+#endif
                 if (prop->doc != doc) {
                     xmlDictPtr oldPropDict = prop->doc ? prop->doc->dict : NULL;
                     prop->name = _copyStringForNewDictIfNeeded(oldPropDict, newDict, prop->name);
@@ -2884,6 +2889,13 @@
 	    xmlSetListDoc(tree->children, doc);
         }
 
+#ifdef FUZZING_BUILD_MODE_UNSAFE_FOR_PRODUCTION
+        if (tree->doc) {
+            assert(xmlDictOwns(tree->doc->dict, tree->name) != 1);
+            assert(xmlDictOwns(tree->doc->dict, tree->content) != 1);
+        }
+        assert(tree->ns == NULL);
+#endif
         tree->name = _copyStringForNewDictIfNeeded(oldTreeDict, newDict, tree->name);
         tree->content = (xmlChar *)_copyStringForNewDictIfNeeded(oldTreeDict, NULL, tree->content);
         /* FIXME: tree->ns should be updated as in xmlStaticCopyNode(). */