Skip to content

Commit 20f2844

Browse files
committed
Updates
1 parent 354708e commit 20f2844

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

44 files changed

+395
-295
lines changed

Diff for: Zend/zend_string.h

+1
Original file line numberDiff line numberDiff line change
@@ -596,6 +596,7 @@ EMPTY_SWITCH_DEFAULT_CASE()
596596
_(ZEND_STR_SCHEME, "scheme") \
597597
_(ZEND_STR_HOST, "host") \
598598
_(ZEND_STR_PORT, "port") \
599+
_(ZEND_STR_USERINFO, "userinfo") \
599600
_(ZEND_STR_USER, "user") \
600601
_(ZEND_STR_PASS, "pass") \
601602
_(ZEND_STR_PASSWORD, "password") \

Diff for: ext/filter/logical_filters.c

+22-87
Original file line numberDiff line numberDiff line change
@@ -591,7 +591,6 @@ static bool php_filter_is_valid_ipv6_hostname(const char *s, size_t l)
591591

592592
void php_filter_validate_url(PHP_INPUT_FILTER_PARAM_DECL) /* {{{ */
593593
{
594-
zend_result result;
595594
size_t old_len = Z_STRLEN_P(value);
596595

597596
php_filter_url(value, flags, option_array, charset);
@@ -612,41 +611,24 @@ void php_filter_validate_url(PHP_INPUT_FILTER_PARAM_DECL) /* {{{ */
612611
RETURN_VALIDATION_FAILED
613612
}
614613

615-
/* Use parse_url - if it returns false, we return NULL */
616-
uri_internal_t *internal_uri = php_uri_parse(uri_handler, Z_STR_P(value), NULL);
617-
if (internal_uri == NULL) {
614+
/* Parse the URI - if it fails, we return NULL */
615+
php_uri *uri = php_uri_parse_to_struct(uri_handler, Z_STR_P(value), URI_COMPONENT_READ_NORMALIZED_MACHINE_FRIENDLY, NULL);
616+
if (uri == NULL) {
618617
RETURN_VALIDATION_FAILED
619618
}
620619

621-
zval scheme;
622-
result = php_uri_get_scheme(internal_uri, URI_COMPONENT_READ_RAW, &scheme);
623-
if (result == FAILURE) {
624-
php_uri_free(internal_uri);
625-
RETURN_VALIDATION_FAILED
626-
}
627-
628-
zval host;
629-
result = php_uri_get_host(internal_uri, URI_COMPONENT_READ_RAW, &host);
630-
if (result == FAILURE) {
631-
zval_ptr_dtor(&scheme);
632-
php_uri_free(internal_uri);
633-
RETURN_VALIDATION_FAILED
634-
}
635-
636-
if (Z_TYPE(scheme) == IS_STRING &&
637-
(zend_string_equals_literal_ci(Z_STR(scheme), "http") || zend_string_equals_literal_ci(Z_STR(scheme), "https"))) {
620+
if (uri->scheme != NULL &&
621+
(zend_string_equals_literal_ci(uri->scheme, "http") || zend_string_equals_literal_ci(uri->scheme, "https"))) {
638622
const char *s;
639623
size_t l;
640624

641-
if (Z_TYPE(host) != IS_STRING) {
642-
php_uri_free(internal_uri);
643-
zval_ptr_dtor(&scheme);
644-
zval_ptr_dtor(&host);
625+
if (uri->host == NULL) {
626+
php_uri_struct_free(uri);
645627
RETURN_VALIDATION_FAILED
646628
}
647629

648-
s = Z_STRVAL(host);
649-
l = Z_STRLEN(host);
630+
s = ZSTR_VAL(uri->host);
631+
l = ZSTR_LEN(uri->host);
650632

651633
if (
652634
/* @todo Find a better solution than hardcoding the uri handler name. Skipping these checks is needed because
@@ -658,80 +640,33 @@ void php_filter_validate_url(PHP_INPUT_FILTER_PARAM_DECL) /* {{{ */
658640
!php_filter_is_valid_ipv6_hostname(s, l) &&
659641
/* Validate domain.
660642
* This includes a loose check for an IPv4 address. */
661-
!_php_filter_validate_domain(Z_STRVAL(host), l, FILTER_FLAG_HOSTNAME)
643+
!_php_filter_validate_domain(ZSTR_VAL(uri->host), l, FILTER_FLAG_HOSTNAME)
662644
) {
663-
php_uri_free(internal_uri);
664-
zval_ptr_dtor(&scheme);
665-
zval_ptr_dtor(&host);
645+
php_uri_struct_free(uri);
666646
RETURN_VALIDATION_FAILED
667647
}
668648
}
669649

670-
zval path;
671-
result = php_uri_get_path(internal_uri, URI_COMPONENT_READ_RAW, &path);
672-
if (result == FAILURE) {
673-
php_uri_free(internal_uri);
674-
zval_ptr_dtor(&scheme);
675-
zval_ptr_dtor(&host);
676-
RETURN_VALIDATION_FAILED
677-
}
678-
679-
zval query;
680-
result = php_uri_get_query(internal_uri, URI_COMPONENT_READ_RAW, &query);
681-
if (result == FAILURE) {
682-
php_uri_free(internal_uri);
683-
zval_ptr_dtor(&scheme);
684-
zval_ptr_dtor(&host);
685-
zval_ptr_dtor(&path);
686-
RETURN_VALIDATION_FAILED
687-
}
688-
689-
if (
690-
Z_TYPE(scheme) == IS_NULL ||
650+
if (uri->scheme == NULL ||
691651
/* some schemes allow the host to be empty */
692-
(Z_TYPE(host) == IS_NULL && (!zend_string_equals_literal(Z_STR(scheme), "mailto") && !zend_string_equals_literal(Z_STR(scheme), "news") && !zend_string_equals_literal(Z_STR(scheme), "file"))) ||
693-
((flags & FILTER_FLAG_PATH_REQUIRED) && Z_TYPE(path) == IS_NULL) || ((flags & FILTER_FLAG_QUERY_REQUIRED) && Z_TYPE(query) == IS_NULL)
652+
(uri->host == NULL && (!zend_string_equals_literal(uri->scheme, "mailto") && !zend_string_equals_literal(uri->scheme, "news") && !zend_string_equals_literal(uri->scheme, "file"))) ||
653+
((flags & FILTER_FLAG_PATH_REQUIRED) && uri->path == NULL) || ((flags & FILTER_FLAG_QUERY_REQUIRED) && uri->query == NULL)
694654
) {
695-
php_uri_free(internal_uri);
696-
zval_ptr_dtor(&scheme);
697-
zval_ptr_dtor(&host);
698-
zval_ptr_dtor(&path);
699-
zval_ptr_dtor(&query);
700-
RETURN_VALIDATION_FAILED
701-
}
702-
703-
zval_ptr_dtor(&scheme);
704-
zval_ptr_dtor(&host);
705-
zval_ptr_dtor(&path);
706-
zval_ptr_dtor(&query);
707-
708-
zval user;
709-
result = php_uri_get_user(internal_uri, URI_COMPONENT_READ_RAW, &user);
710-
if (result == FAILURE) {
711-
php_uri_free(internal_uri);
712-
RETURN_VALIDATION_FAILED
713-
}
714-
715-
zval password;
716-
result = php_uri_get_password(internal_uri, URI_COMPONENT_READ_RAW, &password);
717-
if (result == FAILURE) {
718-
php_uri_free(internal_uri);
719-
zval_ptr_dtor(&user);
655+
php_uri_struct_free(uri);
720656
RETURN_VALIDATION_FAILED
721657
}
722658

723-
if ((Z_TYPE(user) != IS_NULL && !is_userinfo_valid(Z_STR(user)))
724-
|| (Z_TYPE(password) != IS_NULL && !is_userinfo_valid(Z_STR(password)))
659+
if (strcmp(uri_handler->name, "parse_url") == 0 &&
660+
(
661+
(uri->user != NULL && !is_userinfo_valid(uri->user)) ||
662+
(uri->password != NULL && !is_userinfo_valid(uri->password))
663+
)
725664
) {
726-
php_uri_free(internal_uri);
727-
zval_ptr_dtor(&user);
728-
zval_ptr_dtor(&password);
665+
php_uri_struct_free(uri);
729666
RETURN_VALIDATION_FAILED
730667
}
731668

732-
php_uri_free(internal_uri);
733-
zval_ptr_dtor(&user);
734-
zval_ptr_dtor(&password);
669+
php_uri_struct_free(uri);
735670
}
736671
/* }}} */
737672

Diff for: ext/soap/php_http.c

+2-2
Original file line numberDiff line numberDiff line change
@@ -439,7 +439,7 @@ int make_http_soap_request(zval *this_ptr,
439439
zend_argument_value_error(6, "must be a valid URI parser name");
440440
return FALSE;
441441
}
442-
uri = php_uri_parse_to_struct(uri_handler, location, NULL);
442+
uri = php_uri_parse_to_struct(uri_handler, location, URI_COMPONENT_READ_NORMALIZED_MACHINE_FRIENDLY, NULL);
443443
}
444444

445445
tmp = Z_CLIENT_STREAM_CONTEXT_P(this_ptr);
@@ -1160,7 +1160,7 @@ int make_http_soap_request(zval *this_ptr,
11601160
}
11611161

11621162
zend_string *loc_str = zend_string_init(loc, strlen(loc), false);
1163-
php_uri *new_uri = php_uri_parse_to_struct(uri_handler, loc_str, NULL);
1163+
php_uri *new_uri = php_uri_parse_to_struct(uri_handler, loc_str, URI_COMPONENT_READ_NORMALIZED_MACHINE_FRIENDLY, NULL);
11641164
zend_string_release(loc_str);
11651165

11661166
if (new_uri != NULL) {

Diff for: ext/uri/php_lexbor.c

+33
Original file line numberDiff line numberDiff line change
@@ -114,93 +114,123 @@ static void fill_errors(zval *errors)
114114
zend_update_property_string(whatwg_error_ce, Z_OBJ(error), "context", sizeof("context") - 1, (const char *) lxb_error->data);
115115

116116
zend_string *error_str;
117+
zval failure;
117118
switch (lxb_error->id) {
118119
case LXB_URL_ERROR_TYPE_DOMAIN_TO_ASCII:
119120
error_str = zend_string_init("DomainToAscii", sizeof("DomainToAscii"), false);
121+
ZVAL_TRUE(&failure);
120122
break;
121123
case LXB_URL_ERROR_TYPE_DOMAIN_TO_UNICODE:
122124
error_str = zend_string_init("DomainToUnicode", sizeof("DomainToUnicode"), false);
125+
ZVAL_FALSE(&failure);
123126
break;
124127
case LXB_URL_ERROR_TYPE_DOMAIN_INVALID_CODE_POINT:
125128
error_str = zend_string_init("DomainInvalidCodePoint", sizeof("DomainInvalidCodePoint"), false);
129+
ZVAL_TRUE(&failure);
126130
break;
127131
case LXB_URL_ERROR_TYPE_HOST_INVALID_CODE_POINT:
128132
error_str = zend_string_init("HostInvalidCodePoint", sizeof("HostInvalidCodePoint"), false);
133+
ZVAL_TRUE(&failure);
129134
break;
130135
case LXB_URL_ERROR_TYPE_IPV4_EMPTY_PART:
131136
error_str = zend_string_init("Ipv4EmptyPart", sizeof("Ipv4EmptyPart"), false);
137+
ZVAL_FALSE(&failure);
132138
break;
133139
case LXB_URL_ERROR_TYPE_IPV4_TOO_MANY_PARTS:
134140
error_str = zend_string_init("Ipv4TooManyParts", sizeof("Ipv4TooManyParts"), false);
141+
ZVAL_TRUE(&failure);
135142
break;
136143
case LXB_URL_ERROR_TYPE_IPV4_NON_NUMERIC_PART:
137144
error_str = zend_string_init("Ipv4NonNumericPart", sizeof("Ipv4NonNumericPart"), false);
145+
ZVAL_TRUE(&failure);
138146
break;
139147
case LXB_URL_ERROR_TYPE_IPV4_NON_DECIMAL_PART:
140148
error_str = zend_string_init("Ipv4NonDecimalPart", sizeof("Ipv4NonDecimalPart"), false);
149+
ZVAL_FALSE(&failure);
141150
break;
142151
case LXB_URL_ERROR_TYPE_IPV4_OUT_OF_RANGE_PART:
143152
error_str = zend_string_init("Ipv4OutOfRangePart", sizeof("Ipv4OutOfRangePart"), false);
153+
ZVAL_TRUE(&failure);
144154
break;
145155
case LXB_URL_ERROR_TYPE_IPV6_UNCLOSED:
146156
error_str = zend_string_init("Ipv6Unclosed", sizeof("Ipv6Unclosed"), false);
157+
ZVAL_TRUE(&failure);
147158
break;
148159
case LXB_URL_ERROR_TYPE_IPV6_INVALID_COMPRESSION:
149160
error_str = zend_string_init("Ipv6InvalidCompression", sizeof("Ipv6InvalidCompression"), false);
161+
ZVAL_TRUE(&failure);
150162
break;
151163
case LXB_URL_ERROR_TYPE_IPV6_TOO_MANY_PIECES:
152164
error_str = zend_string_init("Ipv6TooManyPieces", sizeof("Ipv6TooManyPieces"), false);
165+
ZVAL_TRUE(&failure);
153166
break;
154167
case LXB_URL_ERROR_TYPE_IPV6_MULTIPLE_COMPRESSION:
155168
error_str = zend_string_init("Ipv6MultipleCompression", sizeof("Ipv6MultipleCompression"), false);
169+
ZVAL_TRUE(&failure);
156170
break;
157171
case LXB_URL_ERROR_TYPE_IPV6_INVALID_CODE_POINT:
158172
error_str = zend_string_init("Ipv6InvalidCodePoint", sizeof("Ipv6InvalidCodePoint"), false);
173+
ZVAL_TRUE(&failure);
159174
break;
160175
case LXB_URL_ERROR_TYPE_IPV6_TOO_FEW_PIECES:
161176
error_str = zend_string_init("Ipv6TooFewPieces", sizeof("Ipv6TooFewPieces"), false);
177+
ZVAL_TRUE(&failure);
162178
break;
163179
case LXB_URL_ERROR_TYPE_IPV4_IN_IPV6_TOO_MANY_PIECES:
164180
error_str = zend_string_init("Ipv4InIpv6TooManyPieces", sizeof("Ipv4InIpv6TooManyPieces"), false);
181+
ZVAL_TRUE(&failure);
165182
break;
166183
case LXB_URL_ERROR_TYPE_IPV4_IN_IPV6_INVALID_CODE_POINT:
167184
error_str = zend_string_init("Ipv4InIpv6InvalidCodePoint", sizeof("Ipv4InIpv6InvalidCodePoint"), false);
185+
ZVAL_TRUE(&failure);
168186
break;
169187
case LXB_URL_ERROR_TYPE_IPV4_IN_IPV6_OUT_OF_RANGE_PART:
170188
error_str = zend_string_init("Ipv4InIpv6OutOfRangePart", sizeof("Ipv4InIpv6OutOfRangePart"), false);
189+
ZVAL_TRUE(&failure);
171190
break;
172191
case LXB_URL_ERROR_TYPE_IPV4_IN_IPV6_TOO_FEW_PARTS:
173192
error_str = zend_string_init("Ipv4InIpv6TooFewParts", sizeof("Ipv4InIpv6TooFewParts"), false);
193+
ZVAL_TRUE(&failure);
174194
break;
175195
case LXB_URL_ERROR_TYPE_INVALID_URL_UNIT:
176196
error_str = zend_string_init("InvalidUrlUnit", sizeof("InvalidUrlUnit"), false);
197+
ZVAL_FALSE(&failure);
177198
break;
178199
case LXB_URL_ERROR_TYPE_SPECIAL_SCHEME_MISSING_FOLLOWING_SOLIDUS:
179200
error_str = zend_string_init("SpecialSchemeMissingFollowingSolidus", sizeof("SpecialSchemeMissingFollowingSolidus"), false);
201+
ZVAL_FALSE(&failure);
180202
break;
181203
case LXB_URL_ERROR_TYPE_MISSING_SCHEME_NON_RELATIVE_URL:
182204
error_str = zend_string_init("MissingSchemeNonRelativeUrl", sizeof("MissingSchemeNonRelativeUrl"), false);
205+
ZVAL_TRUE(&failure);
183206
break;
184207
case LXB_URL_ERROR_TYPE_INVALID_REVERSE_SOLIDUS:
185208
error_str = zend_string_init("InvalidReverseSoldius", sizeof("InvalidReverseSoldius"), false);
209+
ZVAL_FALSE(&failure);
186210
break;
187211
case LXB_URL_ERROR_TYPE_INVALID_CREDENTIALS:
188212
error_str = zend_string_init("InvalidCredentials", sizeof("InvalidCredentials"), false);
213+
ZVAL_FALSE(&failure);
189214
break;
190215
case LXB_URL_ERROR_TYPE_HOST_MISSING:
191216
error_str = zend_string_init("HostMissing", sizeof("HostMissing"), false);
217+
ZVAL_TRUE(&failure);
192218
break;
193219
case LXB_URL_ERROR_TYPE_PORT_OUT_OF_RANGE:
194220
error_str = zend_string_init("PortOfOfRange", sizeof("PortOfOfRange"), false);
221+
ZVAL_TRUE(&failure);
195222
break;
196223
case LXB_URL_ERROR_TYPE_PORT_INVALID:
197224
error_str = zend_string_init("PortInvalid", sizeof("PortInvalid"), false);
225+
ZVAL_TRUE(&failure);
198226
break;
199227
case LXB_URL_ERROR_TYPE_FILE_INVALID_WINDOWS_DRIVE_LETTER:
200228
error_str = zend_string_init("FileInvalidWindowsDriveLetter", sizeof("FileInvalidWindowsDriveLetter"), false);
229+
ZVAL_FALSE(&failure);
201230
break;
202231
case LXB_URL_ERROR_TYPE_FILE_INVALID_WINDOWS_DRIVE_LETTER_HOST:
203232
error_str = zend_string_init("FileInvalidWindowsDriveLetterHost", sizeof("FileInvalidWindowsDriveLetterHost"), false);
233+
ZVAL_FALSE(&failure);
204234
break;
205235
EMPTY_SWITCH_DEFAULT_CASE()
206236
}
@@ -211,6 +241,9 @@ static void fill_errors(zval *errors)
211241
zend_string_release(error_str);
212242
zval_ptr_dtor(&error_type);
213243

244+
zend_update_property(whatwg_error_ce, Z_OBJ(error), "failure", sizeof("failure") - 1, &failure);
245+
zval_ptr_dtor(&failure);
246+
214247
add_next_index_zval(errors, &error);
215248
}
216249

0 commit comments

Comments
 (0)