php.net |  support |  documentation |  report a bug |  advanced search |  search howto |  statistics |  random bug |  login
Bug #6671 using the XML parser in a class does not seem to work any longer
Submitted: 2000-09-12 02:05 UTC Modified: 2002-06-18 18:13 UTC
From: d dot roche at lectra dot com Assigned:
Status: Closed Package: XML related
PHP Version: 4.0.2 OS: Linux RedHat 6.2
Private report: No CVE-ID: None
 [2000-09-12 02:05 UTC] d dot roche at lectra dot com
here is a little script which works with php4.0.1pl2
and crash ( Segmentation fault (11) ) with php4.0.2 !

both version where compiled with :
./configure  --disable-debug --with-apxs=/usr/sbin/apxs --with-regex=system --with-zlib --with-gd --with-db2 --with-gdbm --with-config-file-path=/etc/httpd --enable-trans-sid

the php.ini is the same for both.

========script : cut here================
<head>
<title>test xml problem</title>
</head>
<body>
<h1>test xml problem</h1>
<pre>
<script language="php">

class XmlParse {

  // variable members
  var $parser;

  //***********************************************************
  // constructor

  function XmlParse() {
    $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,"core_data");
  }
 
  //***********************************************************
  // handler (private) functions

  function tag_open($parser,$tag,$attributes) { 
    $this->debug1("tag_open",$tag.$this->viewarray($attributes));
  }
  
  function tag_close($parser,$tag) { 
    $this->debug1("tag_close",$tag);
  }

  function core_data($parser,$cdata) { 
    $this->debug1("core_data",$cdata);
  }
  
  //***********************************************************
  // parse (public) function

  function parse($data) { 

    if (!xml_parse($this->parser, $data, 1)) {
      $error = sprintf("XML error: %s at line %d",
		       xml_error_string(xml_get_error_code($this->parser)),
		       xml_get_current_line_number($this->parser));
      echo $error;
    }
    xml_parser_free($this->parser);
  }

  //***********************************************************
  // debug function

  function debug1($title,$msg) { 

    echo $title;
    echo " &laquo;";
    echo $msg;
    echo "&raquo; ";
    echo "\n";
  }

  function viewarray($arr) { 
    $str = "";
    if ( is_array($arr) ) {
      while ( list($key,$val) = each($arr) ) {
	$str .= " ".$key."=".$val;
      }
    }
    return $str;
  }

}
  

$xmldata = '<?xml version="1.0"?><tab><line><auteur>zimmer bradley</auteur><titre>la matrice fant?me</titre><serie>la romance de t?n?breuse</serie><type>ser20</type><moyenne>16</moyenne><genre>0x00000004</genre><key>0000658</key></line></tab>';

$xfx = new XmlParse();

$xfx->parse($xmldata);    

</script>
</pre>
</body>
==========cut here================

Some other tests i have made shows that XML parsing works well
with standard functions but does not work any longer with class methods.
I use xml_set_object($this->parser,&$this);

thank you for your attention !

Patches

Add a Patch

Pull Requests

Add a Pull Request

History

AllCommentsChangesGit/SVN commitsRelated reports
 [2000-10-30 09:43 UTC] stas@php.net
tim.diggins@teamworks.co.uk also reports this to happen in:

PHP 4.0.2 running as ISAPI under Win98/ed1/PWS
RH6.2 and apache [various versions] 
 [2001-05-07 16:11 UTC] cardinal@php.net
This looks like a dup of 6175.

 [2002-06-18 18:13 UTC] sniper@php.net
Thank you for your bug report. This issue has already been fixed
in the latest released version of PHP, which you can download at 
http://www.php.net/downloads.php


 
PHP Copyright © 2001-2021 The PHP Group
All rights reserved.
Last updated: Sun Dec 05 05:03:37 2021 UTC