summaryrefslogtreecommitdiff
path: root/ext/xml/xml.c
diff options
context:
space:
mode:
authorRob Richards <rrichards@php.net>2004-04-07 16:24:17 +0000
committerRob Richards <rrichards@php.net>2004-04-07 16:24:17 +0000
commite32f012e65764e3b36c2a8e38e55a07699878939 (patch)
tree76b989f8e097a49de1ce250bd0d5d463570d22cc /ext/xml/xml.c
parentc534a9e782b6cf3b49932f96a485128702447ce4 (diff)
downloadphp-git-e32f012e65764e3b36c2a8e38e55a07699878939.tar.gz
Fix bug #27821 xml_parse segfaults when xml_set_object called from class method
fix memleaks in compat.c
Diffstat (limited to 'ext/xml/xml.c')
-rw-r--r--ext/xml/xml.c10
1 files changed, 8 insertions, 2 deletions
diff --git a/ext/xml/xml.c b/ext/xml/xml.c
index 1f29585df0..f17601f8eb 100644
--- a/ext/xml/xml.c
+++ b/ext/xml/xml.c
@@ -380,6 +380,9 @@ static void xml_parser_dtor(zend_rsrc_list_entry *rsrc TSRMLS_DC)
if (parser->baseURI) {
efree(parser->baseURI);
}
+ if (parser->object) {
+ zval_ptr_dtor(&parser->object);
+ }
efree(parser);
}
@@ -1141,14 +1144,17 @@ PHP_FUNCTION(xml_set_object)
if (parser->object) {
zval_ptr_dtor(&parser->object);
}
-
- parser->object = *mythis;
/* please leave this commented - or ask thies@thieso.net before doing it (again) */
/* #ifdef ZEND_ENGINE_2
zval_add_ref(&parser->object);
#endif */
+ ALLOC_ZVAL(parser->object);
+ *parser->object = **mythis;
+ zval_copy_ctor(parser->object);
+ INIT_PZVAL(parser->object);
+
RETVAL_TRUE;
}
/* }}} */