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
Welcome back! If you're the original bug submitter, here's where you can edit the bug or add additional notes.
If you forgot your password, you can retrieve your password here.
Password:
Status:
Package:
Bug Type:
Summary:
From: jacek dot prucia at 7bulls dot com
New email:
PHP Version: OS:

 

 [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

Pull Requests

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-2025 The PHP Group
All rights reserved.
Last updated: Sun Jan 05 01:01:28 2025 UTC