|  support |  documentation |  report a bug |  advanced search |  search howto |  statistics |  random bug |  login
Request #51939 Add xml_set_entity_decl_handler function
Submitted: 2010-05-28 01:40 UTC Modified: 2017-10-24 07:11 UTC
Avg. Score:3.5 ± 0.8
Reproduced:3 of 3 (100.0%)
Same Version:1 (33.3%)
Same OS:2 (66.7%)
From: mchenryc at gmail dot com Assigned:
Status: Open Package: XML related
PHP Version: trunk-SVN-2010-05-28 (SVN) OS:
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 this is not your bug, you can add a comment by following this link.
If this is your bug, but you forgot your password, you can retrieve your password here.
Bug Type:
From: mchenryc at gmail dot com
New email:
PHP Version: OS:


 [2010-05-28 01:40 UTC] mchenryc at gmail dot com
When parsing XML, PHP has no way to set a handler for general entities, though a 
handler can be set for unparsed entities.

Expat has deprecated the XML_SetUnparsedEntityDeclHandler in favor of 
XML_SetEntityDeclHandler, which is called for all entity types (including general 
and unparsed).

PHP should add the xml_set_entity_decl_handler function to allow handling of all 
entity declarations.

Test script:
$data = '<!DOCTYPE test [<!ENTITY generalEntity "General Entity">]><test>&generalEntity;</test>';

function h_entity_decl($parser,$entity_name,$is_parameter_entity,$value,$base,$system_id,$public_id,$notation_name) {
	echo "$entity_name - $is_parameter_entity - $value";

$parser = xml_parser_create();
xml_set_entity_decl_handler($parser, 'h_entity_decl');

xml_parse($parser,$data,false) or 
    die (sprintf("XML Error: %s at line %d<br>\n", 

Expected result:
It should run with the following output:

generalEntity - 0 - General Entity

Actual result:
Fatal Error: Call to undefined function xml_set_entity_decl_handler()


Bug51939.patch (last revision 2011-07-21 13:03 UTC by
bug51939-3-ws.patch (last revision 2011-07-21 12:43 UTC by
bug51392-ws (last revision 2011-07-21 12:39 UTC by
bug51939.patch (last revision 2011-07-19 16:21 UTC by

Add a Patch

Pull Requests

Add a Pull Request


AllCommentsChangesGit/SVN commitsRelated reports
 [2011-07-15 07:23 UTC]
-Status: Open +Status: Assigned -Assigned To: +Assigned To: davidc
 [2011-07-19 12:21 UTC]
The following patch has been added/updated:

Patch Name: bug51939.patch
Revision:   1311092480
 [2011-07-19 12:22 UTC]
I've added a patch for this but I'd like to write a few more tests before committing it. If you could apply it and let me know if this helps you that'd be 
 [2011-07-21 08:39 UTC]
The following patch has been added/updated:

Patch Name: bug51392-ws
Revision:   1311251978
 [2011-07-21 08:43 UTC]
The following patch has been added/updated:

Patch Name: bug51939-3-ws.patch
Revision:   1311252230
 [2011-07-21 09:03 UTC]
The following patch has been added/updated:

Patch Name: Bug51939.patch
Revision:   1311253426
 [2016-02-15 00:45 UTC] anrdaemon at freemail dot ru
Just fell for this trap by myself.
Internal entity declarations are not handled, and fall into default handler or produce errors altogether, depends on your parser setup.
 [2016-02-15 03:18 UTC] anrdaemon at freemail dot ru
David, instead of adding "xml_set_entity_decl_handler" as a new function, how about making it an alias to xml_set_unparsed_entity_decl_handler (or, more precisely, the other way around), and call xml_set_entity_decl_handler() with $system_id set to entity value for internal entities?
 [2017-10-24 07:11 UTC]
-Status: Assigned +Status: Open -Assigned To: davidc +Assigned To:
PHP Copyright © 2001-2021 The PHP Group
All rights reserved.
Last updated: Sat Oct 23 04:03:34 2021 UTC