mirror of
https://github.com/php/php-src.git
synced 2026-03-24 00:02:20 +01:00
uri: Clean up uri_parser_rfc3986.c (#19586)
* uri: Unify string creation in `php_uri_parser_rfc3986_scheme_read()` * uri: Remove useless non-NULL assertions in uri_parser_rfc3986.c The value of `uriparser_uri` is dereferenced *immediately* after the assertion, making it redundant for both the human reader and the compiler. In case of the normalized_uri, the pointer is trivially non-NULL, since it is referring to a struct member at not-the-first position. Generally speaking, unless something is checked for `NULL` one can assume it to never be `NULL`. * uri: Add `has_text_range()` helper to uri_parser_rfc3986.c
This commit is contained in:
@@ -64,6 +64,11 @@ static inline size_t get_text_range_length(const UriTextRangeA *range)
|
||||
return range->afterLast - range->first;
|
||||
}
|
||||
|
||||
static inline bool has_text_range(const UriTextRangeA *range)
|
||||
{
|
||||
return range->first != NULL && range->afterLast != NULL;
|
||||
}
|
||||
|
||||
ZEND_ATTRIBUTE_NONNULL static void copy_uri(UriUriA *new_uriparser_uri, const UriUriA *uriparser_uri)
|
||||
{
|
||||
int result = uriCopyUriMmA(new_uriparser_uri, uriparser_uri, mm);
|
||||
@@ -97,11 +102,9 @@ ZEND_ATTRIBUTE_NONNULL static UriUriA *get_uri_for_reading(php_uri_parser_rfc398
|
||||
ZEND_ATTRIBUTE_NONNULL static zend_result php_uri_parser_rfc3986_scheme_read(const uri_internal_t *internal_uri, uri_component_read_mode_t read_mode, zval *retval)
|
||||
{
|
||||
const UriUriA *uriparser_uri = get_uri_for_reading(internal_uri->uri, read_mode);
|
||||
ZEND_ASSERT(uriparser_uri != NULL);
|
||||
|
||||
if (uriparser_uri->scheme.first != NULL && uriparser_uri->scheme.afterLast != NULL) {
|
||||
zend_string *str = zend_string_init(uriparser_uri->scheme.first, get_text_range_length(&uriparser_uri->scheme), false);
|
||||
ZVAL_NEW_STR(retval, str);
|
||||
ZVAL_STRINGL(retval, uriparser_uri->scheme.first, get_text_range_length(&uriparser_uri->scheme));
|
||||
} else {
|
||||
ZVAL_NULL(retval);
|
||||
}
|
||||
@@ -112,9 +115,8 @@ ZEND_ATTRIBUTE_NONNULL static zend_result php_uri_parser_rfc3986_scheme_read(con
|
||||
ZEND_ATTRIBUTE_NONNULL zend_result php_uri_parser_rfc3986_userinfo_read(const uri_internal_t *internal_uri, uri_component_read_mode_t read_mode, zval *retval)
|
||||
{
|
||||
const UriUriA *uriparser_uri = get_uri_for_reading(internal_uri->uri, read_mode);
|
||||
ZEND_ASSERT(uriparser_uri != NULL);
|
||||
|
||||
if (uriparser_uri->userInfo.first != NULL && uriparser_uri->userInfo.afterLast != NULL) {
|
||||
if (has_text_range(&uriparser_uri->userInfo)) {
|
||||
ZVAL_STRINGL(retval, uriparser_uri->userInfo.first, get_text_range_length(&uriparser_uri->userInfo));
|
||||
} else {
|
||||
ZVAL_NULL(retval);
|
||||
@@ -126,9 +128,8 @@ ZEND_ATTRIBUTE_NONNULL zend_result php_uri_parser_rfc3986_userinfo_read(const ur
|
||||
ZEND_ATTRIBUTE_NONNULL static zend_result php_uri_parser_rfc3986_username_read(const uri_internal_t *internal_uri, uri_component_read_mode_t read_mode, zval *retval)
|
||||
{
|
||||
const UriUriA *uriparser_uri = get_uri_for_reading(internal_uri->uri, read_mode);
|
||||
ZEND_ASSERT(uriparser_uri != NULL);
|
||||
|
||||
if (uriparser_uri->userInfo.first != NULL && uriparser_uri->userInfo.afterLast != NULL) {
|
||||
if (has_text_range(&uriparser_uri->userInfo)) {
|
||||
size_t length = get_text_range_length(&uriparser_uri->userInfo);
|
||||
const char *c = memchr(uriparser_uri->userInfo.first, ':', length);
|
||||
|
||||
@@ -149,9 +150,8 @@ ZEND_ATTRIBUTE_NONNULL static zend_result php_uri_parser_rfc3986_username_read(c
|
||||
ZEND_ATTRIBUTE_NONNULL static zend_result php_uri_parser_rfc3986_password_read(const uri_internal_t *internal_uri, uri_component_read_mode_t read_mode, zval *retval)
|
||||
{
|
||||
const UriUriA *uriparser_uri = get_uri_for_reading(internal_uri->uri, read_mode);
|
||||
ZEND_ASSERT(uriparser_uri != NULL);
|
||||
|
||||
if (uriparser_uri->userInfo.first != NULL && uriparser_uri->userInfo.afterLast != NULL) {
|
||||
if (has_text_range(&uriparser_uri->userInfo)) {
|
||||
const char *c = memchr(uriparser_uri->userInfo.first, ':', get_text_range_length(&uriparser_uri->userInfo));
|
||||
|
||||
if (c != NULL && uriparser_uri->userInfo.afterLast - c - 1 > 0) {
|
||||
@@ -169,9 +169,8 @@ ZEND_ATTRIBUTE_NONNULL static zend_result php_uri_parser_rfc3986_password_read(c
|
||||
ZEND_ATTRIBUTE_NONNULL static zend_result php_uri_parser_rfc3986_host_read(const uri_internal_t *internal_uri, uri_component_read_mode_t read_mode, zval *retval)
|
||||
{
|
||||
const UriUriA *uriparser_uri = get_uri_for_reading(internal_uri->uri, read_mode);
|
||||
ZEND_ASSERT(uriparser_uri != NULL);
|
||||
|
||||
if (uriparser_uri->hostText.first != NULL && uriparser_uri->hostText.afterLast != NULL) {
|
||||
if (has_text_range(&uriparser_uri->hostText)) {
|
||||
if (uriparser_uri->hostData.ip6 != NULL || uriparser_uri->hostData.ipFuture.first != NULL) {
|
||||
/* the textual representation of the host is always accessible in the .hostText field no matter what the host is */
|
||||
smart_str host_str = {0};
|
||||
@@ -205,9 +204,8 @@ ZEND_ATTRIBUTE_NONNULL static size_t str_to_int(const char *str, size_t len)
|
||||
ZEND_ATTRIBUTE_NONNULL static zend_result php_uri_parser_rfc3986_port_read(const uri_internal_t *internal_uri, uri_component_read_mode_t read_mode, zval *retval)
|
||||
{
|
||||
const UriUriA *uriparser_uri = get_uri_for_reading(internal_uri->uri, read_mode);
|
||||
ZEND_ASSERT(uriparser_uri != NULL);
|
||||
|
||||
if (uriparser_uri->portText.first != NULL && uriparser_uri->portText.afterLast != NULL) {
|
||||
if (has_text_range(&uriparser_uri->portText)) {
|
||||
ZVAL_LONG(retval, str_to_int(uriparser_uri->portText.first, get_text_range_length(&uriparser_uri->portText)));
|
||||
} else {
|
||||
ZVAL_NULL(retval);
|
||||
@@ -219,7 +217,6 @@ ZEND_ATTRIBUTE_NONNULL static zend_result php_uri_parser_rfc3986_port_read(const
|
||||
ZEND_ATTRIBUTE_NONNULL static zend_result php_uri_parser_rfc3986_path_read(const uri_internal_t *internal_uri, uri_component_read_mode_t read_mode, zval *retval)
|
||||
{
|
||||
const UriUriA *uriparser_uri = get_uri_for_reading(internal_uri->uri, read_mode);
|
||||
ZEND_ASSERT(uriparser_uri != NULL);
|
||||
|
||||
if (uriparser_uri->pathHead != NULL) {
|
||||
smart_str str = {0};
|
||||
@@ -248,9 +245,8 @@ ZEND_ATTRIBUTE_NONNULL static zend_result php_uri_parser_rfc3986_path_read(const
|
||||
ZEND_ATTRIBUTE_NONNULL static zend_result php_uri_parser_rfc3986_query_read(const uri_internal_t *internal_uri, uri_component_read_mode_t read_mode, zval *retval)
|
||||
{
|
||||
const UriUriA *uriparser_uri = get_uri_for_reading(internal_uri->uri, read_mode);
|
||||
ZEND_ASSERT(uriparser_uri != NULL);
|
||||
|
||||
if (uriparser_uri->query.first != NULL && uriparser_uri->query.afterLast != NULL) {
|
||||
if (has_text_range(&uriparser_uri->query)) {
|
||||
ZVAL_STRINGL(retval, uriparser_uri->query.first, get_text_range_length(&uriparser_uri->query));
|
||||
} else {
|
||||
ZVAL_NULL(retval);
|
||||
@@ -262,9 +258,8 @@ ZEND_ATTRIBUTE_NONNULL static zend_result php_uri_parser_rfc3986_query_read(cons
|
||||
ZEND_ATTRIBUTE_NONNULL static zend_result php_uri_parser_rfc3986_fragment_read(const uri_internal_t *internal_uri, uri_component_read_mode_t read_mode, zval *retval)
|
||||
{
|
||||
const UriUriA *uriparser_uri = get_uri_for_reading(internal_uri->uri, read_mode);
|
||||
ZEND_ASSERT(uriparser_uri != NULL);
|
||||
|
||||
if (uriparser_uri->fragment.first != NULL && uriparser_uri->fragment.afterLast != NULL) {
|
||||
if (has_text_range(&uriparser_uri->fragment)) {
|
||||
ZVAL_STRINGL(retval, uriparser_uri->fragment.first, get_text_range_length(&uriparser_uri->fragment));
|
||||
} else {
|
||||
ZVAL_NULL(retval);
|
||||
|
||||
Reference in New Issue
Block a user