Skip to content
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
37 changes: 11 additions & 26 deletions ext/xml/xml.c
Original file line number Diff line number Diff line change
Expand Up @@ -64,11 +64,7 @@ typedef struct {
XML_Parser parser;
XML_Char *target_encoding;

/* Reference to the object itself, for convenience.
* It is not owned, do not release it. */
zval index;

zend_object *object;
zend_object *object; /* object with handlers */
zend_fcall_info_cache startElementHandler;
zend_fcall_info_cache endElementHandler;
zend_fcall_info_cache characterDataHandler;
Expand Down Expand Up @@ -641,7 +637,7 @@ void xml_startElementHandler(void *userData, const XML_Char *name, const XML_Cha

if (ZEND_FCC_INITIALIZED(parser->startElementHandler)) {
zval args[3];
ZVAL_COPY(&args[0], &parser->index);
ZVAL_OBJ(&args[0], &parser->std);
ZVAL_STR(&args[1], xml_stripped_tag(tag_name, parser->toffset));
array_init(&args[2]);

Expand All @@ -660,7 +656,6 @@ void xml_startElementHandler(void *userData, const XML_Char *name, const XML_Cha
}

zend_call_known_fcc(&parser->startElementHandler, /* retval */ NULL, /* param_count */ 3, args, /* named_params */ NULL);
zval_ptr_dtor(&args[0]);
zval_ptr_dtor_str(&args[1]);
zval_ptr_dtor(&args[2]);
}
Expand Down Expand Up @@ -742,11 +737,10 @@ void xml_endElementHandler(void *userData, const XML_Char *name)

if (ZEND_FCC_INITIALIZED(parser->endElementHandler)) {
zval args[2];
ZVAL_COPY(&args[0], &parser->index);
ZVAL_OBJ(&args[0], &parser->std);
ZVAL_STR(&args[1], xml_stripped_tag(tag_name, parser->toffset));

zend_call_known_fcc(&parser->endElementHandler, /* retval */ NULL, /* param_count */ 2, args, /* named_params */ NULL);
zval_ptr_dtor(&args[0]);
zval_ptr_dtor_str(&args[1]);
}

Expand Down Expand Up @@ -803,11 +797,10 @@ void xml_characterDataHandler(void *userData, const XML_Char *s, int len)

if (ZEND_FCC_INITIALIZED(parser->characterDataHandler)) {
zval args[2];
ZVAL_COPY(&args[0], &parser->index);
ZVAL_OBJ(&args[0], &parser->std);
xml_xmlchar_zval(s, len, parser->target_encoding, &args[1]);

zend_call_known_fcc(&parser->characterDataHandler, /* retval */ NULL, /* param_count */ 2, args, /* named_params */ NULL);
zval_ptr_dtor(&args[0]);
zval_ptr_dtor_str(&args[1]);
}

Expand Down Expand Up @@ -911,12 +904,11 @@ void xml_processingInstructionHandler(void *userData, const XML_Char *target, co

zval args[3];

ZVAL_COPY(&args[0], &parser->index);
ZVAL_OBJ(&args[0], &parser->std);
xml_xmlchar_zval(target, 0, parser->target_encoding, &args[1]);
xml_xmlchar_zval(data, 0, parser->target_encoding, &args[2]);

zend_call_known_fcc(&parser->processingInstructionHandler, /* retval */ NULL, /* param_count */ 3, args, /* named_params */ NULL);
zval_ptr_dtor(&args[0]);
zval_ptr_dtor_str(&args[1]);
zval_ptr_dtor_str(&args[2]);
}
Expand All @@ -933,11 +925,10 @@ void xml_defaultHandler(void *userData, const XML_Char *s, int len)

zval args[2];

ZVAL_COPY(&args[0], &parser->index);
ZVAL_OBJ(&args[0], &parser->std);
xml_xmlchar_zval(s, len, parser->target_encoding, &args[1]);

zend_call_known_fcc(&parser->defaultHandler, /* retval */ NULL, /* param_count */ 2, args, /* named_params */ NULL);
zval_ptr_dtor(&args[0]);
zval_ptr_dtor_str(&args[1]);
}
/* }}} */
Expand All @@ -955,15 +946,14 @@ void xml_unparsedEntityDeclHandler(void *userData,

zval args[6];

ZVAL_COPY(&args[0], &parser->index);
ZVAL_OBJ(&args[0], &parser->std);
xml_xmlchar_zval(entityName, 0, parser->target_encoding, &args[1]);
xml_xmlchar_zval(base, 0, parser->target_encoding, &args[2]);
xml_xmlchar_zval(systemId, 0, parser->target_encoding, &args[3]);
xml_xmlchar_zval(publicId, 0, parser->target_encoding, &args[4]);
xml_xmlchar_zval(notationName, 0, parser->target_encoding, &args[5]);

zend_call_known_fcc(&parser->unparsedEntityDeclHandler, /* retval */ NULL, /* param_count */ 6, args, /* named_params */ NULL);
zval_ptr_dtor(&args[0]);
zval_ptr_dtor_str(&args[1]);
zval_ptr_dtor_str(&args[2]);
zval_ptr_dtor_str(&args[3]);
Expand All @@ -984,14 +974,13 @@ void xml_notationDeclHandler(void *userData, const XML_Char *notationName,

zval args[5];

ZVAL_COPY(&args[0], &parser->index);
ZVAL_OBJ(&args[0], &parser->std);
xml_xmlchar_zval(notationName, 0, parser->target_encoding, &args[1]);
xml_xmlchar_zval(base, 0, parser->target_encoding, &args[2]);
xml_xmlchar_zval(systemId, 0, parser->target_encoding, &args[3]);
xml_xmlchar_zval(publicId, 0, parser->target_encoding, &args[4]);

zend_call_known_fcc(&parser->notationDeclHandler, /* retval */ NULL, /* param_count */ 5, args, /* named_params */ NULL);
zval_ptr_dtor(&args[0]);
zval_ptr_dtor_str(&args[1]);
zval_ptr_dtor_str(&args[2]);
zval_ptr_dtor_str(&args[3]);
Expand All @@ -1013,14 +1002,13 @@ int xml_externalEntityRefHandler(XML_Parser userData, const XML_Char *openEntity
zval args[5];
zval retval;

ZVAL_COPY(&args[0], &parser->index);
ZVAL_OBJ(&args[0], &parser->std);
xml_xmlchar_zval(openEntityNames, 0, parser->target_encoding, &args[1]);
xml_xmlchar_zval(base, 0, parser->target_encoding, &args[2]);
xml_xmlchar_zval(systemId, 0, parser->target_encoding, &args[3]);
xml_xmlchar_zval(publicId, 0, parser->target_encoding, &args[4]);

zend_call_known_fcc(&parser->externalEntityRefHandler, /* retval */ &retval, /* param_count */ 5, args, /* named_params */ NULL);
zval_ptr_dtor(&args[0]);
zval_ptr_dtor_str(&args[1]);
zval_ptr_dtor_str(&args[2]);
zval_ptr_dtor_str(&args[3]);
Expand Down Expand Up @@ -1048,12 +1036,11 @@ void xml_startNamespaceDeclHandler(void *userData,const XML_Char *prefix, const

zval args[3];

ZVAL_COPY(&args[0], &parser->index);
ZVAL_OBJ(&args[0], &parser->std);
xml_xmlchar_zval(prefix, 0, parser->target_encoding, &args[1]);
xml_xmlchar_zval(uri, 0, parser->target_encoding, &args[2]);

zend_call_known_fcc(&parser->startNamespaceDeclHandler, /* retval */ NULL, /* param_count */ 3, args, /* named_params */ NULL);
zval_ptr_dtor(&args[0]);
zval_ptr_dtor_str(&args[1]);
zval_ptr_dtor_str(&args[2]);
}
Expand All @@ -1070,11 +1057,10 @@ void xml_endNamespaceDeclHandler(void *userData, const XML_Char *prefix)

zval args[2];

ZVAL_COPY(&args[0], &parser->index);
ZVAL_OBJ(&args[0], &parser->std);
xml_xmlchar_zval(prefix, 0, parser->target_encoding, &args[1]);

zend_call_known_fcc(&parser->endNamespaceDeclHandler, /* retval */ NULL, /* param_count */ 2, args, /* named_params */ NULL);
zval_ptr_dtor(&args[0]);
zval_ptr_dtor_str(&args[1]);
}
/* }}} */
Expand Down Expand Up @@ -1133,7 +1119,6 @@ static void php_xml_parser_create_impl(INTERNAL_FUNCTION_PARAMETERS, int ns_supp
parser->parsehuge = false; /* It's the default for BC & DoS protection */

XML_SetUserData(parser->parser, parser);
ZVAL_COPY_VALUE(&parser->index, return_value);
}
/* }}} */

Expand Down