Skip to content

Implement "Followup improvements for ext/uri" RFC - RFC 3986 URI building#22173

Open
kocsismate wants to merge 6 commits into
php:masterfrom
kocsismate:uri-followup3
Open

Implement "Followup improvements for ext/uri" RFC - RFC 3986 URI building#22173
kocsismate wants to merge 6 commits into
php:masterfrom
kocsismate:uri-followup3

Conversation

@kocsismate
Copy link
Copy Markdown
Member

Copy link
Copy Markdown
Member

@TimWolla TimWolla left a comment

Choose a reason for hiding this comment

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

I'm not yet sure how I feel about the manual validation happening during recomposition. I'd like to take a second look later.

Comment thread ext/uri/php_uri.c Outdated
Comment thread ext/uri/php_uri.c Outdated
Comment thread ext/uri/uri_parser_rfc3986.c Outdated
Comment thread ext/uri/uri_parser_rfc3986.c Outdated
Comment thread ext/uri/uri_parser_rfc3986.c Outdated
@@ -1,5 +1,5 @@
--TEST--
Test Uri\Rfc3986\Uri component modification - host - too small number
Test Uri\Rfc3986\Uri component modification - port - too small number
Copy link
Copy Markdown
Member Author

Choose a reason for hiding this comment

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

I'll fix this separately

Comment thread ext/uri/php_uri_common.h
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_write)(void *uri, zval *value, zval *errors);
typedef zend_result (*php_uri_property_handler_write)(void *uri, const zval *value, zval *errors);
Copy link
Copy Markdown
Member Author

Choose a reason for hiding this comment

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

I realized that it was possible to make value a const. I can implement this in a separate PR if you think it's a good idea.

return uriIsWellFormedFragmentA(p, p + len);
}

ZEND_ATTRIBUTE_NONNULL_ARGS(2,3,4,5,6,7,8) php_uri_parser_rfc3986_uris *php_uri_parser_rfc3986_build_from_zval(
Copy link
Copy Markdown
Member Author

Choose a reason for hiding this comment

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

how about this method? I think it's more efficient than the previous implementation, because the recomposition part was eliminated. It was also possible to get rid of two custom validation of the "global state" below. The remaining two are needed because uriparser doesn't fail in these cases (

UriBool success = URI_FUNC(FixPathNoScheme)(destUri, memory);
): https://github.com/php/php-src/blob/27bc7c0e1294eb0ce87f071acd42f43f01877d61/ext/uri/tests/rfc3986/modification/roundtrip_special_case2.phpt#L18-L17

Comment thread ext/uri/php_uri.c Outdated
Comment thread ext/uri/php_uri.c
Comment thread ext/uri/php_uri.c Outdated
Comment thread ext/uri/uri_parser_whatwg.c Outdated
@kocsismate
Copy link
Copy Markdown
Member Author

I fixed a few suggestions, thank you very much! I'll continue tomorrow with the rest

@TimWolla TimWolla self-requested a review June 1, 2026 20:34
Comment thread ext/uri/php_uri.c
static zend_result php_uri_parser_rfc3986_add_base_url(
UriUriA *tmp, const UriUriA *uri, const php_uri_parser_rfc3986_uris *uriparser_base_urls, const bool silent
) {
const int result = uriAddBaseUriExMmA(tmp, uri, &uriparser_base_urls->uri, URI_RESOLVE_STRICTLY, mm);
Copy link
Copy Markdown
Member Author

Choose a reason for hiding this comment

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

CLion started to nag me about adding the const modifier for scalar values like this. As far as I know, the compilers usually find out themselves without the modifier if a value is modified or not, so in practice, its only benefit is maybe some extra explicitness. WDYT?

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

The const modifier only helps you, the programmer, marking local as const won't influence the quality of the resulting machine code.
I don't think it's terribly important to mark them as const. If it's not a burden for you or goes automatically feel free to add it of course.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants