ID: 26528
User updated by: archie at dellroad dot org
Reported By: archie at dellroad dot org
Status: Open
Bug Type: XML related
Operating System: Linux redhat 9
PHP Version: 5.0.0b2 (beta2)
New Comment:
I noticed that the version of PHP that came with redhat 9
does not have this bug. It is liked to expat:
$ldd /usr/bin/php
...
libexpat.so.0 => /usr/lib/libexpat.so.0 (0x40028000)
whereas my php-5.0.0b2 does not link to expat. So I guess
the routines in libxml2 are not compatible with the ones
in libexpat.. ?
Previous Comments:
------------------------------------------------------------------------
[2003-12-04 17:00:56] archie at dellroad dot org
Description:
------------
When the function xml_parse_into_struct() is used,
XML attribute values that contain escaped characters
in them are not properly un-escaped.
E.g. suppose the tag is:
<governor name="Jesse "The Body" Ventura"/>
Then the attribute is returned still escaped, as
Jesse "The Body" Ventura
rather than
Jesse "The Body" Ventura
like it should be.
This function is supposed to parse
the XML, and &-encodings are part of XML, so it should
properly decode them!
Here's ldd output for my test version of PHP:
$ ldd ~/php-5.0.0b2/sapi/cli/php
libcrypt.so.1 => /lib/libcrypt.so.1 (0x40017000)
librt.so.1 => /lib/i686/librt.so.1 (0x40064000)
libm.so.6 => /lib/i686/libm.so.6 (0x4007f000)
libmysqlclient.so.10 => /usr/lib/mysql/libmysqlclient.so.10
(0x400cc000) libresolv.so.2 => /lib/libresolv.so.2 (0x40103000)
libdl.so.2 => /lib/libdl.so.2 (0x40116000)
libnsl.so.1 => /lib/libnsl.so.1 (0x4011a000)
libz.so.1 => /usr/lib/libz.so.1 (0x40140000)
libxml2.so.2 => /usr/local/lib/libxml2.so.2 (0x4014e000)
libpthread.so.0 => /lib/i686/libpthread.so.0 (0x40237000)
libc.so.6 => /lib/i686/libc.so.6 (0x40287000)
/lib/ld-linux.so.2 => /lib/ld-linux.so.2 (0x40000000)
Reproduce code:
---------------
<?php
$sample =
"<?xml version=\"1.0\"?><test attr=\"angle<bracket\"/>";
$parser = xml_parser_create();
$res = xml_parse_into_struct($parser,$sample,$vals,$index);
xml_parser_free($parser);
var_dump($vals);
?>
Expected result:
----------------
array(1) {
[0]=>
array(4) {
["tag"]=>
string(4) "TEST"
["type"]=>
string(8) "complete"
["level"]=>
int(1)
["attributes"]=>
array(1) {
["ATTR"]=>
string(16) "angle<bracket"
}
}
}
Actual result:
--------------
array(1) {
[0]=>
array(4) {
["tag"]=>
string(4) "TEST"
["type"]=>
string(8) "complete"
["level"]=>
int(1)
["attributes"]=>
array(1) {
["ATTR"]=>
string(16) "angle<bracket"
}
}
}
------------------------------------------------------------------------
--
Edit this bug report at http://bugs.php.net/?id=26528&edit=1