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

Reply via email to