Skip to content
Merged
Show file tree
Hide file tree
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
29 changes: 15 additions & 14 deletions ext/uri/php_uri.c
Original file line number Diff line number Diff line change
Expand Up @@ -58,42 +58,43 @@ static HashTable *uri_get_debug_properties(zend_object *object)
HashTable *std_properties = zend_std_get_properties(object);
HashTable *result = zend_array_dup(std_properties);

if (UNEXPECTED(internal_uri->uri == NULL)) {
const php_uri_parser * const parser = internal_uri->parser;
void * const uri = internal_uri->uri;

if (UNEXPECTED(uri == NULL)) {
return result;
}

const php_uri_parser *parser = internal_uri->parser;

zval tmp;
if (parser->property_handler.scheme.read(internal_uri, PHP_URI_COMPONENT_READ_MODE_RAW, &tmp) == SUCCESS) {
if (parser->property_handler.scheme.read(uri, PHP_URI_COMPONENT_READ_MODE_RAW, &tmp) == SUCCESS) {
zend_hash_update(result, ZSTR_KNOWN(ZEND_STR_SCHEME), &tmp);
}

if (parser->property_handler.username.read(internal_uri, PHP_URI_COMPONENT_READ_MODE_RAW, &tmp) == SUCCESS) {
if (parser->property_handler.username.read(uri, PHP_URI_COMPONENT_READ_MODE_RAW, &tmp) == SUCCESS) {
zend_hash_update(result, ZSTR_KNOWN(ZEND_STR_USERNAME), &tmp);
}

if (parser->property_handler.password.read(internal_uri, PHP_URI_COMPONENT_READ_MODE_RAW, &tmp) == SUCCESS) {
if (parser->property_handler.password.read(uri, PHP_URI_COMPONENT_READ_MODE_RAW, &tmp) == SUCCESS) {
zend_hash_update(result, ZSTR_KNOWN(ZEND_STR_PASSWORD), &tmp);
}

if (parser->property_handler.host.read(internal_uri, PHP_URI_COMPONENT_READ_MODE_RAW, &tmp) == SUCCESS) {
if (parser->property_handler.host.read(uri, PHP_URI_COMPONENT_READ_MODE_RAW, &tmp) == SUCCESS) {
zend_hash_update(result, ZSTR_KNOWN(ZEND_STR_HOST), &tmp);
}

if (parser->property_handler.port.read(internal_uri, PHP_URI_COMPONENT_READ_MODE_RAW, &tmp) == SUCCESS) {
if (parser->property_handler.port.read(uri, PHP_URI_COMPONENT_READ_MODE_RAW, &tmp) == SUCCESS) {
zend_hash_update(result, ZSTR_KNOWN(ZEND_STR_PORT), &tmp);
}

if (parser->property_handler.path.read(internal_uri, PHP_URI_COMPONENT_READ_MODE_RAW, &tmp) == SUCCESS) {
if (parser->property_handler.path.read(uri, PHP_URI_COMPONENT_READ_MODE_RAW, &tmp) == SUCCESS) {
zend_hash_update(result, ZSTR_KNOWN(ZEND_STR_PATH), &tmp);
}

if (parser->property_handler.query.read(internal_uri, PHP_URI_COMPONENT_READ_MODE_RAW, &tmp) == SUCCESS) {
if (parser->property_handler.query.read(uri, PHP_URI_COMPONENT_READ_MODE_RAW, &tmp) == SUCCESS) {
zend_hash_update(result, ZSTR_KNOWN(ZEND_STR_QUERY), &tmp);
}

if (parser->property_handler.fragment.read(internal_uri, PHP_URI_COMPONENT_READ_MODE_RAW, &tmp) == SUCCESS) {
if (parser->property_handler.fragment.read(uri, PHP_URI_COMPONENT_READ_MODE_RAW, &tmp) == SUCCESS) {
zend_hash_update(result, ZSTR_KNOWN(ZEND_STR_FRAGMENT), &tmp);
}
Comment on lines -68 to 99
Copy link
Member Author

Choose a reason for hiding this comment

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

I think this part of the diff shows nicely how much redundant work the handlers would have been doing when interested in multiple fields of an URI.


Expand Down Expand Up @@ -130,7 +131,7 @@ ZEND_ATTRIBUTE_NONNULL static zend_result php_uri_get_property(const uri_interna
return FAILURE;
}

return property_handler->read(internal_uri, read_mode, zv);
return property_handler->read(internal_uri->uri, read_mode, zv);
}

ZEND_ATTRIBUTE_NONNULL PHPAPI zend_result php_uri_get_scheme(const uri_internal_t *internal_uri, php_uri_component_read_mode read_mode, zval *zv)
Expand Down Expand Up @@ -536,7 +537,7 @@ static void rfc3986_userinfo_read(INTERNAL_FUNCTION_PARAMETERS, php_uri_componen
uri_internal_t *internal_uri = Z_URI_INTERNAL_P(ZEND_THIS);
URI_ASSERT_INITIALIZATION(internal_uri);

if (UNEXPECTED(php_uri_parser_rfc3986_userinfo_read(internal_uri, read_mode, return_value) == FAILURE)) {
if (UNEXPECTED(php_uri_parser_rfc3986_userinfo_read(internal_uri->uri, read_mode, return_value) == FAILURE)) {
zend_throw_error(NULL, "The userinfo component cannot be retrieved");
RETURN_THROWS();
}
Expand Down Expand Up @@ -583,7 +584,7 @@ PHP_METHOD(Uri_Rfc3986_Uri, withUserInfo)
uri_internal_t *new_internal_uri = uri_internal_from_obj(new_object);
URI_ASSERT_INITIALIZATION(new_internal_uri);

if (UNEXPECTED(php_uri_parser_rfc3986_userinfo_write(new_internal_uri, &zv, NULL) == FAILURE)) {
if (UNEXPECTED(php_uri_parser_rfc3986_userinfo_write(new_internal_uri->uri, &zv, NULL) == FAILURE)) {
RETURN_THROWS();
}
}
Expand Down
4 changes: 2 additions & 2 deletions ext/uri/php_uri_common.c
Original file line number Diff line number Diff line change
Expand Up @@ -75,7 +75,7 @@ void uri_read_component(INTERNAL_FUNCTION_PARAMETERS, php_uri_property_name prop
const php_uri_property_handler *property_handler = uri_property_handler_from_internal_uri(internal_uri, property_name);
ZEND_ASSERT(property_handler != NULL);

if (UNEXPECTED(property_handler->read(internal_uri, component_read_mode, return_value) == FAILURE)) {
if (UNEXPECTED(property_handler->read(internal_uri->uri, component_read_mode, return_value) == FAILURE)) {
zend_throw_error(NULL, "The %s component cannot be retrieved", ZSTR_VAL(get_known_string_by_property_name(property_name)));
RETURN_THROWS();
}
Expand Down Expand Up @@ -109,7 +109,7 @@ static void uri_write_component_ex(INTERNAL_FUNCTION_PARAMETERS, php_uri_propert

zval errors;
ZVAL_UNDEF(&errors);
if (UNEXPECTED(property_handler->write(new_internal_uri, property_zv, &errors) == FAILURE)) {
if (UNEXPECTED(property_handler->write(new_internal_uri->uri, property_zv, &errors) == FAILURE)) {
zval_ptr_dtor(&errors);
RETURN_THROWS();
}
Expand Down
6 changes: 2 additions & 4 deletions ext/uri/php_uri_common.h
Original file line number Diff line number Diff line change
Expand Up @@ -41,11 +41,9 @@ typedef enum php_uri_component_read_mode {
PHP_URI_COMPONENT_READ_MODE_NORMALIZED_UNICODE,
} php_uri_component_read_mode;

struct uri_internal_t;
typedef zend_result (*php_uri_property_handler_read)(void *uri, php_uri_component_read_mode read_mode, zval *retval);

typedef zend_result (*php_uri_property_handler_read)(const struct uri_internal_t *internal_uri, php_uri_component_read_mode read_mode, zval *retval);

typedef zend_result (*php_uri_property_handler_write)(struct uri_internal_t *internal_uri, zval *value, zval *errors);
typedef zend_result (*php_uri_property_handler_write)(void *uri, zval *value, zval *errors);

typedef enum php_uri_property_name {
PHP_URI_PROPERTY_NAME_SCHEME,
Expand Down
32 changes: 16 additions & 16 deletions ext/uri/uri_parser_php_parse_url.c
Original file line number Diff line number Diff line change
Expand Up @@ -38,9 +38,9 @@ static zend_string *decode_component(zend_string *in, php_uri_component_read_mod
}
}

static zend_result uri_parser_php_parse_url_scheme_read(const uri_internal_t *internal_uri, php_uri_component_read_mode read_mode, zval *retval)
static zend_result uri_parser_php_parse_url_scheme_read(void *uri, php_uri_component_read_mode read_mode, zval *retval)
{
const php_url *parse_url_uri = internal_uri->uri;
const php_url *parse_url_uri = uri;

if (parse_url_uri->scheme) {
ZVAL_STR(retval, decode_component(parse_url_uri->scheme, read_mode));
Expand All @@ -51,9 +51,9 @@ static zend_result uri_parser_php_parse_url_scheme_read(const uri_internal_t *in
return SUCCESS;
}

static zend_result uri_parser_php_parse_url_username_read(const uri_internal_t *internal_uri, php_uri_component_read_mode read_mode, zval *retval)
static zend_result uri_parser_php_parse_url_username_read(void *uri, php_uri_component_read_mode read_mode, zval *retval)
{
const php_url *parse_url_uri = internal_uri->uri;
const php_url *parse_url_uri = uri;

if (parse_url_uri->user) {
ZVAL_STR(retval, decode_component(parse_url_uri->user, read_mode));
Expand All @@ -64,9 +64,9 @@ static zend_result uri_parser_php_parse_url_username_read(const uri_internal_t *
return SUCCESS;
}

static zend_result uri_parser_php_parse_url_password_read(const uri_internal_t *internal_uri, php_uri_component_read_mode read_mode, zval *retval)
static zend_result uri_parser_php_parse_url_password_read(void *uri, php_uri_component_read_mode read_mode, zval *retval)
{
const php_url *parse_url_uri = internal_uri->uri;
const php_url *parse_url_uri = uri;

if (parse_url_uri->pass) {
ZVAL_STR(retval, decode_component(parse_url_uri->pass, read_mode));
Expand All @@ -77,9 +77,9 @@ static zend_result uri_parser_php_parse_url_password_read(const uri_internal_t *
return SUCCESS;
}

static zend_result uri_parser_php_parse_url_host_read(const uri_internal_t *internal_uri, php_uri_component_read_mode read_mode, zval *retval)
static zend_result uri_parser_php_parse_url_host_read(void *uri, php_uri_component_read_mode read_mode, zval *retval)
{
const php_url *parse_url_uri = internal_uri->uri;
const php_url *parse_url_uri = uri;

if (parse_url_uri->host) {
ZVAL_STR(retval, decode_component(parse_url_uri->host, read_mode));
Expand All @@ -90,9 +90,9 @@ static zend_result uri_parser_php_parse_url_host_read(const uri_internal_t *inte
return SUCCESS;
}

static zend_result uri_parser_php_parse_url_port_read(const uri_internal_t *internal_uri, php_uri_component_read_mode read_mode, zval *retval)
static zend_result uri_parser_php_parse_url_port_read(void *uri, php_uri_component_read_mode read_mode, zval *retval)
{
const php_url *parse_url_uri = internal_uri->uri;
const php_url *parse_url_uri = uri;

if (parse_url_uri->port) {
ZVAL_LONG(retval, parse_url_uri->port);
Expand All @@ -103,9 +103,9 @@ static zend_result uri_parser_php_parse_url_port_read(const uri_internal_t *inte
return SUCCESS;
}

static zend_result uri_parser_php_parse_url_path_read(const uri_internal_t *internal_uri, php_uri_component_read_mode read_mode, zval *retval)
static zend_result uri_parser_php_parse_url_path_read(void *uri, php_uri_component_read_mode read_mode, zval *retval)
{
const php_url *parse_url_uri = internal_uri->uri;
const php_url *parse_url_uri = uri;

if (parse_url_uri->path) {
ZVAL_STR(retval, decode_component(parse_url_uri->path, read_mode));
Expand All @@ -116,9 +116,9 @@ static zend_result uri_parser_php_parse_url_path_read(const uri_internal_t *inte
return SUCCESS;
}

static zend_result uri_parser_php_parse_url_query_read(const uri_internal_t *internal_uri, php_uri_component_read_mode read_mode, zval *retval)
static zend_result uri_parser_php_parse_url_query_read(void *uri, php_uri_component_read_mode read_mode, zval *retval)
{
const php_url *parse_url_uri = internal_uri->uri;
const php_url *parse_url_uri = uri;

if (parse_url_uri->query) {
ZVAL_STR(retval, decode_component(parse_url_uri->query, read_mode));
Expand All @@ -129,9 +129,9 @@ static zend_result uri_parser_php_parse_url_query_read(const uri_internal_t *int
return SUCCESS;
}

static zend_result uri_parser_php_parse_url_fragment_read(const uri_internal_t *internal_uri, php_uri_component_read_mode read_mode, zval *retval)
static zend_result uri_parser_php_parse_url_fragment_read(void *uri, php_uri_component_read_mode read_mode, zval *retval)
{
const php_url *parse_url_uri = internal_uri->uri;
const php_url *parse_url_uri = uri;

if (parse_url_uri->fragment) {
ZVAL_STR(retval, decode_component(parse_url_uri->fragment, read_mode));
Expand Down
Loading