Skip to content

Commit

Permalink
Avoid function pointer cast to preserve ability to do CFI
Browse files Browse the repository at this point in the history
  • Loading branch information
nielsdos committed Jul 6, 2024
1 parent ff3e767 commit 776939c
Show file tree
Hide file tree
Showing 2 changed files with 8 additions and 6 deletions.
8 changes: 5 additions & 3 deletions ext/xml/expat_compat.h
Original file line number Diff line number Diff line change
Expand Up @@ -47,6 +47,8 @@

typedef xmlChar XML_Char;

typedef struct XML_Parser_Struct *XML_Parser;

typedef void (*XML_StartElementHandler)(void *, const XML_Char *, const XML_Char **);
typedef void (*XML_EndElementHandler)(void *, const XML_Char *);
typedef void (*XML_CharacterDataHandler)(void *, const XML_Char *, int);
Expand All @@ -55,7 +57,7 @@ typedef void (*XML_CommentHandler)(void *, const XML_Char *);
typedef void (*XML_DefaultHandler)(void *, const XML_Char *, int);
typedef void (*XML_UnparsedEntityDeclHandler)(void *, const XML_Char *, const XML_Char *, const XML_Char *, const XML_Char *, const XML_Char *);
typedef void (*XML_NotationDeclHandler)(void *, const XML_Char *, const XML_Char *, const XML_Char *, const XML_Char *);
typedef int (*XML_ExternalEntityRefHandler)(void *, const XML_Char *, const XML_Char *, const XML_Char *, const XML_Char *);
typedef int (*XML_ExternalEntityRefHandler)(XML_Parser, const XML_Char *, const XML_Char *, const XML_Char *, const XML_Char *);
typedef void (*XML_StartNamespaceDeclHandler)(void *, const XML_Char *, const XML_Char *);
typedef void (*XML_EndNamespaceDeclHandler)(void *, const XML_Char *);

Expand All @@ -65,7 +67,7 @@ typedef struct XML_Memory_Handling_Suite {
void (*free_fcn)(void *ptr);
} XML_Memory_Handling_Suite;

typedef struct XML_Parser_Struct {
struct XML_Parser_Struct {
int use_namespace;

xmlChar *_ns_separator;
Expand All @@ -84,7 +86,7 @@ typedef struct XML_Parser_Struct {
XML_ExternalEntityRefHandler h_external_entity_ref;
XML_StartNamespaceDeclHandler h_start_ns;
XML_EndNamespaceDeclHandler h_end_ns;
} *XML_Parser;
};

enum XML_Error {
XML_ERROR_NONE,
Expand Down
6 changes: 3 additions & 3 deletions ext/xml/xml.c
Original file line number Diff line number Diff line change
Expand Up @@ -919,10 +919,10 @@ void xml_notationDeclHandler(void *userData, const XML_Char *notationName,
/* }}} */

/* {{{ xml_externalEntityRefHandler() */
int xml_externalEntityRefHandler(XML_Parser parserPtr, const XML_Char *openEntityNames,
int xml_externalEntityRefHandler(XML_Parser userData, const XML_Char *openEntityNames,
const XML_Char *base, const XML_Char *systemId, const XML_Char *publicId)
{
xml_parser *parser = XML_GetUserData(parserPtr);
xml_parser *parser = XML_GetUserData(userData);

if (!parser || !ZEND_FCC_INITIALIZED(parser->externalEntityRefHandler)) {
return 0;
Expand Down Expand Up @@ -1296,7 +1296,7 @@ XML_SET_HANDLER_PHP_FUNCTION(xml_set_processing_instruction_handler, processingI
XML_SET_HANDLER_PHP_FUNCTION(xml_set_default_handler, defaultHandler, XML_SetDefaultHandler, xml_defaultHandler);
XML_SET_HANDLER_PHP_FUNCTION(xml_set_unparsed_entity_decl_handler, unparsedEntityDeclHandler, XML_SetUnparsedEntityDeclHandler, xml_unparsedEntityDeclHandler);
XML_SET_HANDLER_PHP_FUNCTION(xml_set_notation_decl_handler, notationDeclHandler, XML_SetNotationDeclHandler, xml_notationDeclHandler);
XML_SET_HANDLER_PHP_FUNCTION(xml_set_external_entity_ref_handler, externalEntityRefHandler, XML_SetExternalEntityRefHandler, (void *) xml_externalEntityRefHandler);
XML_SET_HANDLER_PHP_FUNCTION(xml_set_external_entity_ref_handler, externalEntityRefHandler, XML_SetExternalEntityRefHandler, xml_externalEntityRefHandler);
XML_SET_HANDLER_PHP_FUNCTION(xml_set_start_namespace_decl_handler, startNamespaceDeclHandler, XML_SetStartNamespaceDeclHandler, xml_startNamespaceDeclHandler);
XML_SET_HANDLER_PHP_FUNCTION(xml_set_end_namespace_decl_handler, endNamespaceDeclHandler, XML_SetEndNamespaceDeclHandler, xml_endNamespaceDeclHandler);

Expand Down

0 comments on commit 776939c

Please sign in to comment.