ID:               37440
 Updated by:       [EMAIL PROTECTED]
 Reported By:      kenashkov at gmail dot com
-Status:           Open
+Status:           Wont fix
 Bug Type:         XML related
 Operating System: Fedora Core 4
 PHP Version:      4.4.2
 New Comment:

We are sorry, but we can not support PHP 4 related problems anymore.
Momentum is gathering for PHP 6, and we think supporting PHP 4 will
lead to a waste of resources which we want to put into getting PHP 6
ready.




Previous Comments:
------------------------------------------------------------------------

[2006-07-22 15:22:18] kenashkov at gmail dot com

This can be reproduced useing the example from xml_set_object()
function reference found here:
http://www.php.net/manual/en/function.xml-set-object.php

Here is the exact reproduce code:
-------------------------------------
<?php
class xml  {
   var $parser;

   function xml()
   {
       $this->parser = xml_parser_create();

       xml_set_object($this->parser, $this);
       xml_set_element_handler($this->parser, "tag_open",
"tag_close");
       xml_set_character_data_handler($this->parser, "cdata");
   }

   function parse($data)
   {
       xml_parse($this->parser, $data);
   }

   function tag_open($parser, $tag, $attributes)
   {
       var_dump($parser, $tag, $attributes);
   }

   function cdata($parser, $cdata)
   {
       var_dump($parser, $cdata);
   }

   function tag_close($parser, $tag)
   {
       var_dump($parser, $tag);
   }

} // end of class xml

$xml_parser = new xml();
$xml_parser->parse("<A ID='hallo'>PHP</A>");

$xml_parser = new xml();
$xml_parser->parse("<A ID='hallo'>PHP</A>");
?>
-------------------------------------

The only modification in comparison with the given example in the
manual is the second assignment of $xml_parser to a new object.

The result is:
-------------------------------------
resource(2) of type (xml) string(1) "A" array(1) { ["ID"]=>  string(5)
"hallo" } resource(2) of type (xml) string(3) "PHP" resource(2) of type
(xml) string(1) "A"
Warning: xml_parse() [function.xml-parse.html]: Unable to call handler
tag_open() in /home/local/dev.kenashkov.com/XPATS/bug_test/t4.php on
line 16

Warning: xml_parse() [function.xml-parse.html]: Unable to call handler
cdata() in /home/local/dev.kenashkov.com/XPATS/bug_test/t4.php on line
16

Warning: xml_parse() [function.xml-parse.html]: Unable to call handler
tag_close() in /home/local/dev.kenashkov.com/XPATS/bug_test/t4.php on
line 16
-------------------------------------

It works as expected in PHP 5.1.4

The code produces the bug in PHP 4.4.2 with the following cofigure
line:
-------------------------------------
'./configure' '--prefix=/web/php4.4.2'
'--with-apxs2=/web/apache2-php4/bin/apxs' '--enable-bcmath=shared'
'--with-bz2=shared' '--enable-calendar=shared' '--enable-ctype=shared'
'--with-curl=shared' '--enable-dba=shared' '--enable-dbase=shared'
'--enable-dbx=shared' '--enable-dio=shared' '--with-dom=shared'
'--with-dom-xsl=shared' '--with-dom-xslt=shared'
'--with-dom-exslt=shared' '--enable-exif=shared' '--with-fam=shared'
'--enable-ftp=shared' '--with-gettext=shared' '--with-gmp=shared'
'--with-iconv=shared' '--with-gd=shared' '--with-jpeg-dir'
'--with-png-dir' '--with-xpm-dir' '--with-ttf' '--with-freetype-dir'
'--enable-gd-native-ttf' '--with-ldap=shared' '--enable-mbstring=all'
'--enable-mbstr-enc-trans' '--enable-mbregex' '--with-mime-magic=shared'
'--with-mysql=/web/mysql-max-5.0.15-linux-i686-glibc23'
'--with-ncurses=shared' '--with-openssl=shared'
'--enable-overload=shared' '--enable-pcntl=shared' '--with-pgsql=shared'
'--with-regex' '--enable-maintainer-zts' '--enable-sysvsem=shared'
'--enable-sysvshm=shared' '--enable-sysvmsg=shared'
'--enable-shmop=shared' '--enable-sockets=shared'
'--enable-memory-limit' '--enable-wddx=shared' '--with-zlib=shared'
'--with-mhash=shared' '--with-mcrypt=shared' '--enable-xslt=shared'
'--with-xslt-sablot' '--with-mssql=shared' '--with-kerberos=shared'
'--enable-yp' '--enable-fastcgi'
'--with-oci8=/u01/app/oracle/product/10.1.0/Db_1'
-------------------------------------

------------------------------------------------------------------------

[2006-05-14 20:11:51] kenashkov at gmail dot com

Description:
------------
When assigning multiple times to ane variable an object which contains
a XML parser, there is a problem when the xml_parse is called. The
parser can not call the registered handlers.
The problem can be avoided if the variable is unset before the second
call, or using $doc1 =& new xml_doc() for every assignment.

Reproduce code:
---------------
<?
class xml_doc
{
function xml_doc()
        {
        $this->res = xml_parser_create_ns();
        xml_set_object($this->res,$this);
        xml_set_element_handler($this->res,'start_element','end_element');
        }
        
function load_string($string)
        {
        xml_parse($this->res,$string);
        }
        
function start_element()
        {
        }
        
function end_element()
        {
        }
}

$str = '<?xml version="1" encoding="UTF-8"
standalone="yes"?><root></root>';
$doc1 = new xml_doc();
$doc1->load_string($str);
//unset($doc1);//this solves the problem
//or using $doc1 =& new xml_doc(); in every assignment
$doc1 = new xml_doc();
$doc1->load_string($str);
?>

Expected result:
----------------
Nothing really... it is too simple to do real parsing.

Actual result:
--------------
Warning: xml_parse() [function.xml-parse.html]: Unable to call handler
start_element() in file.php on line 13

Warning: xml_parse() [function.xml-parse.html]: Unable to call handler
end_element() in file.php on line 13


------------------------------------------------------------------------


-- 
Edit this bug report at http://bugs.php.net/?id=37440&edit=1

Reply via email to