rrichards Thu Apr 28 08:17:18 2005 EDT
Modified files: (Branch: PHP_5_0)
/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.26&r2=1.26.2.1&ty=u
Index: php-src/ext/xml/php_xml.h
diff -u php-src/ext/xml/php_xml.h:1.26 php-src/ext/xml/php_xml.h:1.26.2.1
--- php-src/ext/xml/php_xml.h:1.26 Thu Jan 8 12:32:59 2004
+++ php-src/ext/xml/php_xml.h Thu Apr 28 08:17:18 2005
@@ -18,7 +18,7 @@
+----------------------------------------------------------------------+
*/
-/* $Id: php_xml.h,v 1.26 2004/01/08 17:32:59 sniper Exp $ */
+/* $Id: php_xml.h,v 1.26.2.1 2005/04/28 12:17:18 rrichards Exp $ */
#ifndef PHP_XML_H
#define PHP_XML_H
@@ -90,6 +90,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.151.2.3&r2=1.151.2.4&ty=u
Index: php-src/ext/xml/xml.c
diff -u php-src/ext/xml/xml.c:1.151.2.3 php-src/ext/xml/xml.c:1.151.2.4
--- php-src/ext/xml/xml.c:1.151.2.3 Thu Mar 10 20:14:29 2005
+++ php-src/ext/xml/xml.c Thu Apr 28 08:17:18 2005
@@ -18,7 +18,7 @@
+----------------------------------------------------------------------+
*/
-/* $Id: xml.c,v 1.151.2.3 2005/03/11 01:14:29 helly Exp $ */
+/* $Id: xml.c,v 1.151.2.4 2005/04/28 12:17:18 rrichards Exp $ */
#define IS_EXT_MODULE
@@ -1076,6 +1076,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);
@@ -1334,7 +1336,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);
}
@@ -1373,7 +1377,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);
}
@@ -1474,6 +1480,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