From: Rob Richards Date: Wed, 7 Apr 2004 16:24:17 +0000 (+0000) Subject: Fix bug #27821 xml_parse segfaults when xml_set_object called from class method X-Git-Tag: php-5.0.0RC2RC1~63 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=e32f012e65764e3b36c2a8e38e55a07699878939;p=php Fix bug #27821 xml_parse segfaults when xml_set_object called from class method fix memleaks in compat.c --- diff --git a/ext/xml/compat.c b/ext/xml/compat.c index e6590c6987..396393ee51 100644 --- a/ext/xml/compat.c +++ b/ext/xml/compat.c @@ -232,6 +232,7 @@ _comment_handler(void *user, const xmlChar *comment) _build_comment(comment, xmlStrlen(comment), &d_comment, &d_comment_len); parser->h_default(parser->user, d_comment, d_comment_len); + xmlFree(d_comment); } } @@ -257,6 +258,7 @@ _get_entity(void *user, const xmlChar *name) _build_entity(name, xmlStrlen(name), &entity, &len); parser->h_default(parser->user, (const xmlChar *) entity, len); + xmlFree(entity); } return NULL; 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; } /* }}} */