php.net |  support |  documentation |  report a bug |  advanced search |  search howto |  statistics |  random bug |  login
Bug #12286 xml_parse isn't returning FALSE with malformed <?xml ...?> element
Submitted: 2001-07-20 11:25 UTC Modified: 2002-08-21 11:08 UTC
From: jacek dot prucia at 7bulls dot com Assigned:
Status: Closed Package: XML related
PHP Version: 4.0.6 OS: Debian Potato 2.2 (Linux 2.2.17)
Private report: No CVE-ID: None
 [2001-07-20 11:25 UTC] jacek dot prucia at 7bulls dot com
consider XML file beginning with:

<?xml version='1.0'?>

everything is just fine, but let us have a small typo - lack of question sign at the end like this:

<?xml version='1.0'>

this isn't correct, but xml_parse() isn't returning FALSE (as it is supposed to do in case of an error). Instead xml_parse() goes on but it isn't able to find any XML element which gives impression of xml_parse() being totally dead...


Patches

Add a Patch

Pull Requests

Add a Pull Request

History

AllCommentsChangesGit/SVN commitsRelated reports
 [2002-08-17 02:06 UTC] kalowsky@php.net
this actually sounds more like a problem with the library than the PHP code.  Have you tried a recent version of the libxml to see if this still continues?  While you're at it, do try a newer version of PHP too, although I don't believe the xml extension has changed much. 
 [2002-08-17 03:17 UTC] chregu@php.net
xml_parse has nothing to do with libxml, it uses the expat library. Just as a clarification :)

chregu
 [2002-08-19 09:02 UTC] jacek dot prucia at 7bulls dot com
just tried expat 1.95.4 (latest from http://expat.sf.net) with:

1. standalone program (expat's outline.c example)
2. php4-STABLE-200208190000 (snaps.php.net) with Apache 1.3.26 compiled with external expat support (--with-expat-dir=/usr) against that fresh 1.95.4

with 1 everything is just fine, parser catches error and displays:

Parse error at line 1:
unclosed token

However i still get the same result with 2, even when manipulating PHP code a bit. In particular -- i have registerd a small function with xml_set_processing_instruction_handler, that just echoes $target and $data to stdout. Same effect -- no error from xml_parse

This might be a bit of help -- when I make an ordinary error (with normal tag, not PI) parser catches that out and returns error. Behaviour described in this bug only applies to xml PI tags.

I had a quick look at ext/xml/xml.c, but i'm not that familiar with PHP  API yet, to be of any help ;)
 [2002-08-19 10:50 UTC] chregu@php.net
hi

you have to call xml_parse with the third argument is_final set to true, when you parse the last part of your xml-document. Then it shows the error.

The following script works  fine for me:

<?php
$xml = "<?xml version='dd'?><root/>";

$xml_parser = xml_parser_create();
if (!xml_parse($xml_parser, $xml,1)) {
    printf("XML error: %s at line %d\n%d",
           xml_error_string(xml_get_error_code($xml_parser)),
           xml_get_current_line_number($xml_parser),
           xml_get_current_column_number($xml_parser));
    die();

}

?>

chregu





 [2002-08-19 10:51 UTC] chregu@php.net
Hi again

Of course, the script "works" (reports an error) if you change the xml to

$xml = "<?xml version='dd'><root/>";

(that's what i wanted to say)

chregu
 [2002-08-21 11:08 UTC] jacek dot prucia at 7bulls dot com
Sorry for clutering PHP bug DB with this problem. After all, it turned out that I didn't note the difference how feof() is returned with fgets(). Because of that feof($file) wasn't evaluated to true, and xml_parse was quiet, because it was sure that there are more XML blocks pending. Thanks for response and clarification. I think i'll post this story as a user comment to xml_parse function.
 
PHP Copyright © 2001-2024 The PHP Group
All rights reserved.
Last updated: Thu Apr 18 07:01:27 2024 UTC