Skip to content

Converted the zend_parse_parameters in xml.c to the fast API. #5561

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Closed
wants to merge 1 commit into from
Closed
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
154 changes: 92 additions & 62 deletions ext/xml/xml.c
Original file line number Diff line number Diff line change
Expand Up @@ -1012,8 +1012,17 @@ static void php_xml_parser_create_impl(INTERNAL_FUNCTION_PARAMETERS, int ns_supp

XML_Char *encoding;

if (zend_parse_parameters(ZEND_NUM_ARGS(), (ns_support ? "|s!s": "|s!"), &encoding_param, &encoding_param_len, &ns_param, &ns_param_len) == FAILURE) {
RETURN_THROWS();
if (ns_support) {
ZEND_PARSE_PARAMETERS_START(0, 2)
Z_PARAM_OPTIONAL
Z_PARAM_STRING_EX(encoding_param, encoding_param_len, 1, 0)
Z_PARAM_STRING(ns_param, ns_param_len)
ZEND_PARSE_PARAMETERS_END();
} else {
ZEND_PARSE_PARAMETERS_START(0, 2)
Z_PARAM_OPTIONAL
Z_PARAM_STRING_EX(encoding_param, encoding_param_len, 1, 0)
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Should be the Z_PARAM_STRING_OR_NULL version, moreover is there a reason for it to not use zend_strings instead of keeping the char* with a separate length.

ZEND_PARSE_PARAMETERS_END();
}

if (encoding_param != NULL) {
Expand Down Expand Up @@ -1078,9 +1087,10 @@ PHP_FUNCTION(xml_set_object)
xml_parser *parser;
zval *pind, *mythis;

if (zend_parse_parameters(ZEND_NUM_ARGS(), "Oo", &pind, xml_parser_ce, &mythis) == FAILURE) {
RETURN_THROWS();
}
ZEND_PARSE_PARAMETERS_START(2, 2)
Z_PARAM_OBJECT_OF_CLASS(pind, xml_parser_ce)
Z_PARAM_OBJECT(mythis)
ZEND_PARSE_PARAMETERS_END();

parser = Z_XMLPARSER_P(pind);

Expand All @@ -1099,9 +1109,11 @@ PHP_FUNCTION(xml_set_element_handler)
xml_parser *parser;
zval *pind, *shdl, *ehdl;

if (zend_parse_parameters(ZEND_NUM_ARGS(), "Ozz", &pind, xml_parser_ce, &shdl, &ehdl) == FAILURE) {
RETURN_THROWS();
}
ZEND_PARSE_PARAMETERS_START(3, 3)
Z_PARAM_OBJECT_OF_CLASS(pind, xml_parser_ce)
Z_PARAM_ZVAL(shdl)
Z_PARAM_ZVAL(ehdl)
ZEND_PARSE_PARAMETERS_END();

parser = Z_XMLPARSER_P(pind);
xml_set_handler(&parser->startElementHandler, shdl);
Expand All @@ -1118,9 +1130,10 @@ PHP_FUNCTION(xml_set_character_data_handler)
xml_parser *parser;
zval *pind, *hdl;

if (zend_parse_parameters(ZEND_NUM_ARGS(), "Oz", &pind, xml_parser_ce, &hdl) == FAILURE) {
RETURN_THROWS();
}
ZEND_PARSE_PARAMETERS_START(2, 2)
Z_PARAM_OBJECT_OF_CLASS(pind, xml_parser_ce)
Z_PARAM_ZVAL(hdl)
ZEND_PARSE_PARAMETERS_END();

parser = Z_XMLPARSER_P(pind);
xml_set_handler(&parser->characterDataHandler, hdl);
Expand All @@ -1136,9 +1149,10 @@ PHP_FUNCTION(xml_set_processing_instruction_handler)
xml_parser *parser;
zval *pind, *hdl;

if (zend_parse_parameters(ZEND_NUM_ARGS(), "Oz", &pind, xml_parser_ce, &hdl) == FAILURE) {
RETURN_THROWS();
}
ZEND_PARSE_PARAMETERS_START(2, 2)
Z_PARAM_OBJECT_OF_CLASS(pind, xml_parser_ce)
Z_PARAM_ZVAL(hdl)
ZEND_PARSE_PARAMETERS_END();

parser = Z_XMLPARSER_P(pind);
xml_set_handler(&parser->processingInstructionHandler, hdl);
Expand All @@ -1154,9 +1168,10 @@ PHP_FUNCTION(xml_set_default_handler)
xml_parser *parser;
zval *pind, *hdl;

if (zend_parse_parameters(ZEND_NUM_ARGS(), "Oz", &pind, xml_parser_ce, &hdl) == FAILURE) {
RETURN_THROWS();
}
ZEND_PARSE_PARAMETERS_START(2, 2)
Z_PARAM_OBJECT_OF_CLASS(pind, xml_parser_ce)
Z_PARAM_ZVAL(hdl)
ZEND_PARSE_PARAMETERS_END();

parser = Z_XMLPARSER_P(pind);
xml_set_handler(&parser->defaultHandler, hdl);
Expand All @@ -1172,9 +1187,10 @@ PHP_FUNCTION(xml_set_unparsed_entity_decl_handler)
xml_parser *parser;
zval *pind, *hdl;

if (zend_parse_parameters(ZEND_NUM_ARGS(), "Oz", &pind, xml_parser_ce, &hdl) == FAILURE) {
RETURN_THROWS();
}
ZEND_PARSE_PARAMETERS_START(2, 2)
Z_PARAM_OBJECT_OF_CLASS(pind, xml_parser_ce)
Z_PARAM_ZVAL(hdl)
ZEND_PARSE_PARAMETERS_END();

parser = Z_XMLPARSER_P(pind);
xml_set_handler(&parser->unparsedEntityDeclHandler, hdl);
Expand All @@ -1190,9 +1206,10 @@ PHP_FUNCTION(xml_set_notation_decl_handler)
xml_parser *parser;
zval *pind, *hdl;

if (zend_parse_parameters(ZEND_NUM_ARGS(), "Oz", &pind, xml_parser_ce, &hdl) == FAILURE) {
RETURN_THROWS();
}
ZEND_PARSE_PARAMETERS_START(2, 2)
Z_PARAM_OBJECT_OF_CLASS(pind, xml_parser_ce)
Z_PARAM_ZVAL(hdl)
ZEND_PARSE_PARAMETERS_END();

parser = Z_XMLPARSER_P(pind);
xml_set_handler(&parser->notationDeclHandler, hdl);
Expand All @@ -1208,9 +1225,10 @@ PHP_FUNCTION(xml_set_external_entity_ref_handler)
xml_parser *parser;
zval *pind, *hdl;

if (zend_parse_parameters(ZEND_NUM_ARGS(), "Oz", &pind, xml_parser_ce, &hdl) == FAILURE) {
RETURN_THROWS();
}
ZEND_PARSE_PARAMETERS_START(2, 2)
Z_PARAM_OBJECT_OF_CLASS(pind, xml_parser_ce)
Z_PARAM_ZVAL(hdl)
ZEND_PARSE_PARAMETERS_END();

parser = Z_XMLPARSER_P(pind);
xml_set_handler(&parser->externalEntityRefHandler, hdl);
Expand All @@ -1226,9 +1244,10 @@ PHP_FUNCTION(xml_set_start_namespace_decl_handler)
xml_parser *parser;
zval *pind, *hdl;

if (zend_parse_parameters(ZEND_NUM_ARGS(), "Oz", &pind, xml_parser_ce, &hdl) == FAILURE) {
RETURN_THROWS();
}
ZEND_PARSE_PARAMETERS_START(2, 2)
Z_PARAM_OBJECT_OF_CLASS(pind, xml_parser_ce)
Z_PARAM_ZVAL(hdl)
ZEND_PARSE_PARAMETERS_END();

parser = Z_XMLPARSER_P(pind);
xml_set_handler(&parser->startNamespaceDeclHandler, hdl);
Expand All @@ -1244,9 +1263,10 @@ PHP_FUNCTION(xml_set_end_namespace_decl_handler)
xml_parser *parser;
zval *pind, *hdl;

if (zend_parse_parameters(ZEND_NUM_ARGS(), "Oz", &pind, xml_parser_ce, &hdl) == FAILURE) {
RETURN_THROWS();
}
ZEND_PARSE_PARAMETERS_START(2, 2)
Z_PARAM_OBJECT_OF_CLASS(pind, xml_parser_ce)
Z_PARAM_ZVAL(hdl)
ZEND_PARSE_PARAMETERS_END();

parser = Z_XMLPARSER_P(pind);
xml_set_handler(&parser->endNamespaceDeclHandler, hdl);
Expand All @@ -1266,9 +1286,12 @@ PHP_FUNCTION(xml_parse)
int ret;
zend_bool isFinal = 0;

if (zend_parse_parameters(ZEND_NUM_ARGS(), "Os|b", &pind, xml_parser_ce, &data, &data_len, &isFinal) == FAILURE) {
RETURN_THROWS();
}
ZEND_PARSE_PARAMETERS_START(2, 3)
Z_PARAM_OBJECT_OF_CLASS(pind, xml_parser_ce)
Z_PARAM_STRING(data, data_len)
Z_PARAM_OPTIONAL
Z_PARAM_BOOL(isFinal)
ZEND_PARSE_PARAMETERS_END();

parser = Z_XMLPARSER_P(pind);
parser->isparsing = 1;
Expand All @@ -1289,9 +1312,13 @@ PHP_FUNCTION(xml_parse_into_struct)
size_t data_len;
int ret;

if (zend_parse_parameters(ZEND_NUM_ARGS(), "Osz|z", &pind, xml_parser_ce, &data, &data_len, &xdata, &info) == FAILURE) {
RETURN_THROWS();
}
ZEND_PARSE_PARAMETERS_START(3, 4)
Z_PARAM_OBJECT_OF_CLASS(pind, xml_parser_ce)
Z_PARAM_STRING(data, data_len)
Z_PARAM_ZVAL(xdata)
Z_PARAM_OPTIONAL
Z_PARAM_ZVAL(info)
ZEND_PARSE_PARAMETERS_END();

parser = Z_XMLPARSER_P(pind);

Expand Down Expand Up @@ -1334,9 +1361,9 @@ PHP_FUNCTION(xml_get_error_code)
xml_parser *parser;
zval *pind;

if (zend_parse_parameters(ZEND_NUM_ARGS(), "O", &pind, xml_parser_ce) == FAILURE) {
RETURN_THROWS();
}
ZEND_PARSE_PARAMETERS_START(1, 1)
Z_PARAM_OBJECT_OF_CLASS(pind, xml_parser_ce)
ZEND_PARSE_PARAMETERS_END();

parser = Z_XMLPARSER_P(pind);
RETURN_LONG((zend_long)XML_GetErrorCode(parser->parser));
Expand All @@ -1350,9 +1377,9 @@ PHP_FUNCTION(xml_error_string)
zend_long code;
char *str;

if (zend_parse_parameters(ZEND_NUM_ARGS(), "l", &code) == FAILURE) {
RETURN_THROWS();
}
ZEND_PARSE_PARAMETERS_START(1, 1)
Z_PARAM_LONG(code)
ZEND_PARSE_PARAMETERS_END();

str = (char *)XML_ErrorString((int)code);
if (str) {
Expand All @@ -1368,9 +1395,9 @@ PHP_FUNCTION(xml_get_current_line_number)
xml_parser *parser;
zval *pind;

if (zend_parse_parameters(ZEND_NUM_ARGS(), "O", &pind, xml_parser_ce) == FAILURE) {
RETURN_THROWS();
}
ZEND_PARSE_PARAMETERS_START(1, 1)
Z_PARAM_OBJECT_OF_CLASS(pind, xml_parser_ce)
ZEND_PARSE_PARAMETERS_END();

parser = Z_XMLPARSER_P(pind);
RETVAL_LONG(XML_GetCurrentLineNumber(parser->parser));
Expand All @@ -1384,9 +1411,9 @@ PHP_FUNCTION(xml_get_current_column_number)
xml_parser *parser;
zval *pind;

if (zend_parse_parameters(ZEND_NUM_ARGS(), "O", &pind, xml_parser_ce) == FAILURE) {
RETURN_THROWS();
}
ZEND_PARSE_PARAMETERS_START(1, 1)
Z_PARAM_OBJECT_OF_CLASS(pind, xml_parser_ce)
ZEND_PARSE_PARAMETERS_END();

parser = Z_XMLPARSER_P(pind);
RETVAL_LONG(XML_GetCurrentColumnNumber(parser->parser));
Expand All @@ -1400,9 +1427,9 @@ PHP_FUNCTION(xml_get_current_byte_index)
xml_parser *parser;
zval *pind;

if (zend_parse_parameters(ZEND_NUM_ARGS(), "O", &pind, xml_parser_ce) == FAILURE) {
RETURN_THROWS();
}
ZEND_PARSE_PARAMETERS_START(1, 1)
Z_PARAM_OBJECT_OF_CLASS(pind, xml_parser_ce)
ZEND_PARSE_PARAMETERS_END();

parser = Z_XMLPARSER_P(pind);
RETVAL_LONG(XML_GetCurrentByteIndex(parser->parser));
Expand All @@ -1416,9 +1443,9 @@ PHP_FUNCTION(xml_parser_free)
zval *pind;
xml_parser *parser;

if (zend_parse_parameters(ZEND_NUM_ARGS(), "O", &pind, xml_parser_ce) == FAILURE) {
RETURN_THROWS();
}
ZEND_PARSE_PARAMETERS_START(1, 1)
Z_PARAM_OBJECT_OF_CLASS(pind, xml_parser_ce)
ZEND_PARSE_PARAMETERS_END();

parser = Z_XMLPARSER_P(pind);
if (parser->isparsing == 1) {
Expand All @@ -1438,9 +1465,11 @@ PHP_FUNCTION(xml_parser_set_option)
zval *pind, *val;
zend_long opt;

if (zend_parse_parameters(ZEND_NUM_ARGS(), "Olz", &pind, xml_parser_ce, &opt, &val) == FAILURE) {
RETURN_THROWS();
}
ZEND_PARSE_PARAMETERS_START(3, 3)
Z_PARAM_OBJECT_OF_CLASS(pind, xml_parser_ce)
Z_PARAM_LONG(opt)
Z_PARAM_ZVAL(val)
ZEND_PARSE_PARAMETERS_END();

parser = Z_XMLPARSER_P(pind);
switch (opt) {
Expand Down Expand Up @@ -1488,9 +1517,10 @@ PHP_FUNCTION(xml_parser_get_option)
zval *pind;
zend_long opt;

if (zend_parse_parameters(ZEND_NUM_ARGS(), "Ol", &pind, xml_parser_ce, &opt) == FAILURE) {
RETURN_THROWS();
}
ZEND_PARSE_PARAMETERS_START(2, 2)
Z_PARAM_OBJECT_OF_CLASS(pind, xml_parser_ce)
Z_PARAM_LONG(opt)
ZEND_PARSE_PARAMETERS_END();

parser = Z_XMLPARSER_P(pind);
switch (opt) {
Expand Down