summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--ext/libxml/libxml.c4
-rw-r--r--ext/libxml/php_libxml.h13
2 files changed, 16 insertions, 1 deletions
diff --git a/ext/libxml/libxml.c b/ext/libxml/libxml.c
index dc5b38921f..b2d55c6122 100644
--- a/ext/libxml/libxml.c
+++ b/ext/libxml/libxml.c
@@ -942,6 +942,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 9fc35ae610..afc538e847 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 {