rrichards Thu Apr 28 08:19:38 2005 EDT Modified files: (Branch: PHP_4_3) /php-src/ext/xml php_xml.h xml.c Log: MFH: Fix bug #32245 (xml_parser_free() in function assigned to the xml parser gives a segfault) http://cvs.php.net/diff.php/php-src/ext/xml/php_xml.h?r1=1.19.8.1&r2=1.19.8.2&ty=u Index: php-src/ext/xml/php_xml.h diff -u php-src/ext/xml/php_xml.h:1.19.8.1 php-src/ext/xml/php_xml.h:1.19.8.2 --- php-src/ext/xml/php_xml.h:1.19.8.1 Tue Dec 31 11:35:43 2002 +++ php-src/ext/xml/php_xml.h Thu Apr 28 08:19:38 2005 @@ -17,7 +17,7 @@ +----------------------------------------------------------------------+ */ -/* $Id: php_xml.h,v 1.19.8.1 2002/12/31 16:35:43 sebastian Exp $ */ +/* $Id: php_xml.h,v 1.19.8.2 2005/04/28 12:19:38 rrichards Exp $ */ #ifndef PHP_XML_H #define PHP_XML_H @@ -79,6 +79,7 @@ char **ltags; int lastwasopen; int skipwhite; + int isparsing; XML_Char *baseURI; } xml_parser; http://cvs.php.net/diff.php/php-src/ext/xml/xml.c?r1=1.110.2.4&r2=1.110.2.5&ty=u Index: php-src/ext/xml/xml.c diff -u php-src/ext/xml/xml.c:1.110.2.4 php-src/ext/xml/xml.c:1.110.2.5 --- php-src/ext/xml/xml.c:1.110.2.4 Fri Jan 16 14:12:42 2004 +++ php-src/ext/xml/xml.c Thu Apr 28 08:19:38 2005 @@ -17,7 +17,7 @@ +----------------------------------------------------------------------+ */ -/* $Id: xml.c,v 1.110.2.4 2004/01/16 19:12:42 sniper Exp $ */ +/* $Id: xml.c,v 1.110.2.5 2005/04/28 12:19:38 rrichards Exp $ */ #define IS_EXT_MODULE @@ -1044,6 +1044,8 @@ parser->target_encoding = encoding; parser->case_folding = 1; parser->object = NULL; + parser->isparsing = 0; + XML_SetUserData(parser->parser, parser); ZEND_REGISTER_RESOURCE(return_value,parser,le_xml_parser); @@ -1337,7 +1339,9 @@ isFinal = 0; } + parser->isparsing = 1; ret = XML_Parse(parser->parser, Z_STRVAL_PP(data), Z_STRLEN_PP(data), isFinal); + parser->isparsing = 0; RETVAL_LONG(ret); } @@ -1376,7 +1380,9 @@ XML_SetElementHandler(parser->parser, _xml_startElementHandler, _xml_endElementHandler); XML_SetCharacterDataHandler(parser->parser, _xml_characterDataHandler); + parser->isparsing = 1; ret = XML_Parse(parser->parser, Z_STRVAL_PP(data), Z_STRLEN_PP(data), 1); + parser->isparsing = 0; RETVAL_LONG(ret); } @@ -1477,6 +1483,11 @@ ZEND_FETCH_RESOURCE(parser,xml_parser *, pind, -1, "XML Parser", le_xml_parser); + if (parser->isparsing == 1) { + php_error_docref(NULL TSRMLS_CC, E_WARNING, "Parser cannot be freed while it is parsing."); + RETURN_FALSE; + } + if (zend_list_delete(parser->index) == FAILURE) { RETURN_FALSE; }
-- PHP CVS Mailing List (http://www.php.net/) To unsubscribe, visit: http://www.php.net/unsub.php