Skip to content

Commit 1193823

Browse files
authored
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
1 parent 6f32e1c commit 1193823

File tree

1 file changed

+13
-18
lines changed

1 file changed

+13
-18
lines changed

ext/uri/uri_parser_rfc3986.c

Lines changed: 13 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -64,6 +64,11 @@ static inline size_t get_text_range_length(const UriTextRangeA *range)
6464
return range->afterLast - range->first;
6565
}
6666

67+
static inline bool has_text_range(const UriTextRangeA *range)
68+
{
69+
return range->first != NULL && range->afterLast != NULL;
70+
}
71+
6772
ZEND_ATTRIBUTE_NONNULL static void copy_uri(UriUriA *new_uriparser_uri, const UriUriA *uriparser_uri)
6873
{
6974
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
97102
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)
98103
{
99104
const UriUriA *uriparser_uri = get_uri_for_reading(internal_uri->uri, read_mode);
100-
ZEND_ASSERT(uriparser_uri != NULL);
101105

102106
if (uriparser_uri->scheme.first != NULL && uriparser_uri->scheme.afterLast != NULL) {
103-
zend_string *str = zend_string_init(uriparser_uri->scheme.first, get_text_range_length(&uriparser_uri->scheme), false);
104-
ZVAL_NEW_STR(retval, str);
107+
ZVAL_STRINGL(retval, uriparser_uri->scheme.first, get_text_range_length(&uriparser_uri->scheme));
105108
} else {
106109
ZVAL_NULL(retval);
107110
}
@@ -112,9 +115,8 @@ ZEND_ATTRIBUTE_NONNULL static zend_result php_uri_parser_rfc3986_scheme_read(con
112115
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)
113116
{
114117
const UriUriA *uriparser_uri = get_uri_for_reading(internal_uri->uri, read_mode);
115-
ZEND_ASSERT(uriparser_uri != NULL);
116118

117-
if (uriparser_uri->userInfo.first != NULL && uriparser_uri->userInfo.afterLast != NULL) {
119+
if (has_text_range(&uriparser_uri->userInfo)) {
118120
ZVAL_STRINGL(retval, uriparser_uri->userInfo.first, get_text_range_length(&uriparser_uri->userInfo));
119121
} else {
120122
ZVAL_NULL(retval);
@@ -126,9 +128,8 @@ ZEND_ATTRIBUTE_NONNULL zend_result php_uri_parser_rfc3986_userinfo_read(const ur
126128
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)
127129
{
128130
const UriUriA *uriparser_uri = get_uri_for_reading(internal_uri->uri, read_mode);
129-
ZEND_ASSERT(uriparser_uri != NULL);
130131

131-
if (uriparser_uri->userInfo.first != NULL && uriparser_uri->userInfo.afterLast != NULL) {
132+
if (has_text_range(&uriparser_uri->userInfo)) {
132133
size_t length = get_text_range_length(&uriparser_uri->userInfo);
133134
const char *c = memchr(uriparser_uri->userInfo.first, ':', length);
134135

@@ -149,9 +150,8 @@ ZEND_ATTRIBUTE_NONNULL static zend_result php_uri_parser_rfc3986_username_read(c
149150
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)
150151
{
151152
const UriUriA *uriparser_uri = get_uri_for_reading(internal_uri->uri, read_mode);
152-
ZEND_ASSERT(uriparser_uri != NULL);
153153

154-
if (uriparser_uri->userInfo.first != NULL && uriparser_uri->userInfo.afterLast != NULL) {
154+
if (has_text_range(&uriparser_uri->userInfo)) {
155155
const char *c = memchr(uriparser_uri->userInfo.first, ':', get_text_range_length(&uriparser_uri->userInfo));
156156

157157
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
169169
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)
170170
{
171171
const UriUriA *uriparser_uri = get_uri_for_reading(internal_uri->uri, read_mode);
172-
ZEND_ASSERT(uriparser_uri != NULL);
173172

174-
if (uriparser_uri->hostText.first != NULL && uriparser_uri->hostText.afterLast != NULL) {
173+
if (has_text_range(&uriparser_uri->hostText)) {
175174
if (uriparser_uri->hostData.ip6 != NULL || uriparser_uri->hostData.ipFuture.first != NULL) {
176175
/* the textual representation of the host is always accessible in the .hostText field no matter what the host is */
177176
smart_str host_str = {0};
@@ -205,9 +204,8 @@ ZEND_ATTRIBUTE_NONNULL static size_t str_to_int(const char *str, size_t len)
205204
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)
206205
{
207206
const UriUriA *uriparser_uri = get_uri_for_reading(internal_uri->uri, read_mode);
208-
ZEND_ASSERT(uriparser_uri != NULL);
209207

210-
if (uriparser_uri->portText.first != NULL && uriparser_uri->portText.afterLast != NULL) {
208+
if (has_text_range(&uriparser_uri->portText)) {
211209
ZVAL_LONG(retval, str_to_int(uriparser_uri->portText.first, get_text_range_length(&uriparser_uri->portText)));
212210
} else {
213211
ZVAL_NULL(retval);
@@ -219,7 +217,6 @@ ZEND_ATTRIBUTE_NONNULL static zend_result php_uri_parser_rfc3986_port_read(const
219217
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)
220218
{
221219
const UriUriA *uriparser_uri = get_uri_for_reading(internal_uri->uri, read_mode);
222-
ZEND_ASSERT(uriparser_uri != NULL);
223220

224221
if (uriparser_uri->pathHead != NULL) {
225222
smart_str str = {0};
@@ -248,9 +245,8 @@ ZEND_ATTRIBUTE_NONNULL static zend_result php_uri_parser_rfc3986_path_read(const
248245
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)
249246
{
250247
const UriUriA *uriparser_uri = get_uri_for_reading(internal_uri->uri, read_mode);
251-
ZEND_ASSERT(uriparser_uri != NULL);
252248

253-
if (uriparser_uri->query.first != NULL && uriparser_uri->query.afterLast != NULL) {
249+
if (has_text_range(&uriparser_uri->query)) {
254250
ZVAL_STRINGL(retval, uriparser_uri->query.first, get_text_range_length(&uriparser_uri->query));
255251
} else {
256252
ZVAL_NULL(retval);
@@ -262,9 +258,8 @@ ZEND_ATTRIBUTE_NONNULL static zend_result php_uri_parser_rfc3986_query_read(cons
262258
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)
263259
{
264260
const UriUriA *uriparser_uri = get_uri_for_reading(internal_uri->uri, read_mode);
265-
ZEND_ASSERT(uriparser_uri != NULL);
266261

267-
if (uriparser_uri->fragment.first != NULL && uriparser_uri->fragment.afterLast != NULL) {
262+
if (has_text_range(&uriparser_uri->fragment)) {
268263
ZVAL_STRINGL(retval, uriparser_uri->fragment.first, get_text_range_length(&uriparser_uri->fragment));
269264
} else {
270265
ZVAL_NULL(retval);

0 commit comments

Comments
 (0)