diff --git a/ext/libxml/libxml.c b/ext/libxml/libxml.c index adb48bd7a5e..0ac351d9979 100644 --- a/ext/libxml/libxml.c +++ b/ext/libxml/libxml.c @@ -952,6 +952,10 @@ int php_libxml_decrement_doc_ref(php_libxml_node_object *object TSRMLS_DC) { xmlFreeDoc((xmlDoc *) object->document->ptr); } if (object->document->doc_props != NULL) { + if (object->document->doc_props->classmap) { + zend_hash_destroy(object->document->doc_props->classmap); + FREE_HASHTABLE(object->document->doc_props->classmap); + } efree(object->document->doc_props); } efree(object->document); diff --git a/ext/libxml/php_libxml.h b/ext/libxml/php_libxml.h index 584465fd37c..ffefff362e1 100644 --- a/ext/libxml/php_libxml.h +++ b/ext/libxml/php_libxml.h @@ -43,10 +43,21 @@ typedef struct { zend_llist *error_list; } php_libxml_globals; +typedef struct _libxml_doc_props { + int formatoutput; + int validateonparse; + int resolveexternals; + int preservewhitespace; + int substituteentities; + int stricterror; + int recover; + HashTable *classmap; +} libxml_doc_props; + typedef struct _php_libxml_ref_obj { void *ptr; int refcount; - void *doc_props; + libxml_doc_props *doc_props; } php_libxml_ref_obj; typedef struct _php_libxml_node_ptr {