Skip to content

Commit a76e193

Browse files
committed
Change the parse_uri handler to use const char *
1 parent 2a85703 commit a76e193

File tree

15 files changed

+57
-108
lines changed

15 files changed

+57
-108
lines changed

ext/filter/logical_filters.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -615,7 +615,7 @@ void php_filter_validate_url(PHP_INPUT_FILTER_PARAM_DECL) /* {{{ */
615615
}
616616

617617
/* Parse the URI - if it fails, we return NULL */
618-
php_uri *uri = php_uri_parse_to_struct(uri_handler, Z_STR_P(value), URI_COMPONENT_READ_NORMALIZED_ASCII, true);
618+
php_uri *uri = php_uri_parse_to_struct(uri_handler, Z_STRVAL_P(value), Z_STRLEN_P(value), URI_COMPONENT_READ_NORMALIZED_ASCII, true);
619619
if (uri == NULL) {
620620
RETURN_VALIDATION_FAILED
621621
}

ext/openssl/xp_ssl.c

Lines changed: 2 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,6 @@
2424
#include "php.h"
2525
#include "ext/standard/file.h"
2626
#include "ext/standard/url.h"
27-
#include "ext/uri/php_uri.h"
2827
#include "streams/php_streams_int.h"
2928
#include "zend_smart_str.h"
3029
#include "php_openssl.h"
@@ -2620,40 +2619,20 @@ static zend_long php_openssl_get_crypto_method(
26202619
}
26212620
/* }}} */
26222621

2623-
static uri_handler_t *ssl_get_uri_handler(php_stream_context *context)
2624-
{
2625-
if (context == NULL) {
2626-
return php_uri_get_handler(NULL);
2627-
}
2628-
2629-
zval *uri_handler_name = php_stream_context_get_option(context, "ssl", "uri_parser_class");
2630-
if (uri_handler_name == NULL) {
2631-
return php_uri_get_handler(NULL);
2632-
}
2633-
2634-
if (Z_TYPE_P(uri_handler_name) != IS_STRING) {
2635-
return NULL;
2636-
}
2637-
2638-
return php_uri_get_handler(Z_STR_P(uri_handler_name));
2639-
}
2640-
26412622
static char *php_openssl_get_url_name(const char *resourcename,
26422623
size_t resourcenamelen, int is_persistent, php_stream_context *context) /* {{{ */
26432624
{
26442625
if (!resourcename) {
26452626
return NULL;
26462627
}
26472628

2648-
uri_handler_t *uri_handler = ssl_get_uri_handler(context);
2629+
uri_handler_t *uri_handler = php_stream_context_get_uri_handler("ssl", context);
26492630
if (uri_handler == NULL) {
26502631
return NULL;
26512632
}
26522633

2653-
zend_string *resource = zend_string_init(resourcename, resourcenamelen, false);
2654-
uri_internal_t *internal_uri = php_uri_parse(uri_handler, resource, true);
2634+
uri_internal_t *internal_uri = php_uri_parse(uri_handler, resourcename, resourcenamelen, true);
26552635
if (internal_uri == NULL) {
2656-
zend_string_efree(resource);
26572636
return NULL;
26582637
}
26592638

@@ -2673,13 +2652,11 @@ static char *php_openssl_get_url_name(const char *resourcename,
26732652
url_name = pestrndup(host, len, is_persistent);
26742653
}
26752654

2676-
zend_string_release(resource);
26772655
php_uri_free(internal_uri);
26782656
zval_ptr_dtor(&host_zv);
26792657
return url_name;
26802658
}
26812659

2682-
zend_string_release(resource);
26832660
php_uri_free(internal_uri);
26842661
zval_ptr_dtor(&host_zv);
26852662
return NULL;

ext/soap/php_http.c

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -440,7 +440,7 @@ int make_http_soap_request(zval *this_ptr,
440440
zend_argument_value_error(6, "must be a valid URI parser name");
441441
return FALSE;
442442
}
443-
uri = php_uri_parse_to_struct(uri_handler, location, URI_COMPONENT_READ_NORMALIZED_ASCII, true);
443+
uri = php_uri_parse_to_struct(uri_handler, ZSTR_VAL(location), ZSTR_LEN(location), URI_COMPONENT_READ_NORMALIZED_ASCII, true);
444444
}
445445

446446
tmp = Z_CLIENT_STREAM_CONTEXT_P(this_ptr);
@@ -1159,9 +1159,7 @@ int make_http_soap_request(zval *this_ptr,
11591159
return FALSE;
11601160
}
11611161

1162-
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, URI_COMPONENT_READ_NORMALIZED_ASCII, true);
1164-
zend_string_release_ex(loc_str, false);
1162+
php_uri *new_uri = php_uri_parse_to_struct(uri_handler, loc, strlen(loc), URI_COMPONENT_READ_NORMALIZED_ASCII, true);
11651163
efree(loc);
11661164

11671165
if (new_uri != NULL) {

ext/standard/ftp_fopen_wrapper.c

Lines changed: 5 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,6 @@
3838
#endif
3939

4040
#include "php_standard.h"
41-
#include "ext/uri/php_uri.h"
4241

4342
#include <sys/types.h>
4443
#ifdef HAVE_SYS_SOCKET_H
@@ -122,24 +121,6 @@ static int php_stream_ftp_stream_close(php_stream_wrapper *wrapper, php_stream *
122121
}
123122
/* }}} */
124123

125-
static uri_handler_t *ftp_get_uri_handler(php_stream_context *context)
126-
{
127-
if (context == NULL) {
128-
return php_uri_get_handler(NULL);
129-
}
130-
131-
zval *uri_handler_name = php_stream_context_get_option(context, "ftp", "uri_parser_class");
132-
if (uri_handler_name == NULL) {
133-
return php_uri_get_handler(NULL);
134-
}
135-
136-
if (Z_TYPE_P(uri_handler_name) != IS_STRING) {
137-
return NULL;
138-
}
139-
140-
return php_uri_get_handler(Z_STR_P(uri_handler_name));
141-
}
142-
143124
/* {{{ php_ftp_fopen_connect */
144125
static php_stream *php_ftp_fopen_connect(php_stream_wrapper *wrapper, const char *path, const char *mode, int options,
145126
zend_string **opened_path, php_stream_context *context, php_stream **preuseid,
@@ -152,14 +133,12 @@ static php_stream *php_ftp_fopen_connect(php_stream_wrapper *wrapper, const char
152133
char *transport;
153134
int transport_len;
154135

155-
uri_handler_t *uri_handler = ftp_get_uri_handler(context);
136+
uri_handler_t *uri_handler = php_stream_context_get_uri_handler("ftp", context);
156137
if (uri_handler == NULL) {
157138
return NULL;
158139
}
159140

160-
zend_string *tmp_uri = zend_string_init(path, strlen(path), false);
161-
resource = php_uri_parse_to_struct(uri_handler, tmp_uri, URI_COMPONENT_READ_RAW, true);
162-
zend_string_release_ex(tmp_uri, false);
141+
resource = php_uri_parse_to_struct(uri_handler, path, strlen(path), URI_COMPONENT_READ_RAW, true);
163142
if (resource == NULL || resource->path == NULL) {
164143
if (resource && presource) {
165144
*presource = resource;
@@ -974,21 +953,17 @@ static int php_stream_ftp_rename(php_stream_wrapper *wrapper, const char *url_fr
974953
int result;
975954
char tmp_line[512];
976955

977-
uri_handler_t *uri_handler = ftp_get_uri_handler(context);
956+
uri_handler_t *uri_handler = php_stream_context_get_uri_handler("ftp", context);
978957
if (uri_handler == NULL) {
979958
return 0;
980959
}
981960

982-
zend_string *tmp_uri = zend_string_init(url_from, strlen(url_from), false);
983-
resource_from = php_uri_parse_to_struct(uri_handler, tmp_uri, URI_COMPONENT_READ_RAW, true);
984-
zend_string_release_ex(tmp_uri, false);
961+
resource_from = php_uri_parse_to_struct(uri_handler, url_from, strlen(url_from), URI_COMPONENT_READ_RAW, true);
985962
if (!resource_from) {
986963
return 0;
987964
}
988965

989-
tmp_uri = zend_string_init(url_to, strlen(url_to), false);
990-
resource_to = php_uri_parse_to_struct(uri_handler, tmp_uri, URI_COMPONENT_READ_RAW, true);
991-
zend_string_release_ex(tmp_uri, 1);
966+
resource_to = php_uri_parse_to_struct(uri_handler, url_to, strlen(url_to), URI_COMPONENT_READ_RAW, true);
992967
if (!resource_to) {
993968
goto rename_errexit;
994969
}

ext/standard/http_fopen_wrapper.c

Lines changed: 3 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,6 @@
4141
#endif
4242

4343
#include "php_standard.h"
44-
#include "ext/uri/php_uri.h"
4544

4645
#include <sys/types.h>
4746
#ifdef HAVE_SYS_SOCKET_H
@@ -353,24 +352,6 @@ static zend_string *php_stream_http_response_headers_parse(php_stream_wrapper *w
353352
return NULL;
354353
}
355354

356-
static uri_handler_t *http_get_uri_handler(php_stream_context *context)
357-
{
358-
if (context == NULL) {
359-
return php_uri_get_handler(NULL);
360-
}
361-
362-
zval *uri_handler_name = php_stream_context_get_option(context, "http", "uri_parser_class");
363-
if (uri_handler_name == NULL) {
364-
return php_uri_get_handler(NULL);
365-
}
366-
367-
if (Z_TYPE_P(uri_handler_name) != IS_STRING) {
368-
return NULL;
369-
}
370-
371-
return php_uri_get_handler(Z_STR_P(uri_handler_name));
372-
}
373-
374355
static php_stream *php_stream_url_wrap_http_ex(php_stream_wrapper *wrapper,
375356
const char *path, const char *mode, int options, zend_string **opened_path,
376357
php_stream_context *context, int redirect_max, int flags,
@@ -410,13 +391,11 @@ static php_stream *php_stream_url_wrap_http_ex(php_stream_wrapper *wrapper,
410391
return NULL;
411392
}
412393

413-
uri_handler_t *uri_handler = http_get_uri_handler(context);
394+
uri_handler_t *uri_handler = php_stream_context_get_uri_handler("http", context);
414395
if (uri_handler == NULL) {
415396
return NULL;
416397
}
417-
zend_string *tmp_uri = zend_string_init(path, strlen(path), false);
418-
resource = php_uri_parse_to_struct(uri_handler, tmp_uri, URI_COMPONENT_READ_RAW, true);
419-
zend_string_release_ex(tmp_uri, false);
398+
resource = php_uri_parse_to_struct(uri_handler, path, strlen(path), URI_COMPONENT_READ_RAW, true);
420399
if (resource == NULL) {
421400
return NULL;
422401
}
@@ -1121,14 +1100,11 @@ static php_stream *php_stream_url_wrap_http_ex(php_stream_wrapper *wrapper,
11211100

11221101
php_uri_struct_free(resource);
11231102
/* check for invalid redirection URLs */
1124-
tmp_uri = zend_string_init(new_path, strlen(new_path), 1);
1125-
if ((resource = php_uri_parse_to_struct(uri_handler, tmp_uri, URI_COMPONENT_READ_RAW, true)) == NULL) {
1103+
if ((resource = php_uri_parse_to_struct(uri_handler, new_path, strlen(new_path), URI_COMPONENT_READ_RAW, true)) == NULL) {
11261104
php_stream_wrapper_log_error(wrapper, options, "Invalid redirect URL! %s", new_path);
11271105
efree(new_path);
1128-
zend_string_release_ex(tmp_uri, 1);
11291106
goto out;
11301107
}
1131-
zend_string_release_ex(tmp_uri, 1);
11321108

11331109
#define CHECK_FOR_CNTRL_CHARS(val) { \
11341110
if (val) { \

ext/standard/url.c

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -435,11 +435,11 @@ static void throw_invalid_uri_exception(void)
435435
zend_throw_exception(uri_invalid_uri_exception_ce, "The specified URI is malformed", 0);
436436
}
437437

438-
static void *parse_url_parse_uri(const zend_string *uri_str, const void *base_url, zval *errors, bool silent)
438+
static void *parse_url_parse_uri(const char *uri_str, size_t uri_str_len, const void *base_url, zval *errors, bool silent)
439439
{
440440
bool has_port;
441441

442-
php_url *url = php_url_parse_ex2(ZSTR_VAL(uri_str), ZSTR_LEN(uri_str), &has_port);
442+
php_url *url = php_url_parse_ex2(uri_str, uri_str_len, &has_port);
443443
if (url == NULL && !silent) {
444444
throw_invalid_uri_exception();
445445
}

ext/uri/php_lexbor.c

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -562,11 +562,11 @@ void lexbor_request_shutdown(void)
562562
lexbor_urls = 0;
563563
}
564564

565-
lxb_url_t *lexbor_parse_uri_ex(const zend_string *uri_str, const lxb_url_t *lexbor_base_url, zval *errors, bool silent)
565+
lxb_url_t *lexbor_parse_uri_ex(const char *uri_str, size_t uri_str_len, const lxb_url_t *lexbor_base_url, zval *errors, bool silent)
566566
{
567567
lexbor_cleanup_parser();
568568

569-
lxb_url_t *url = lxb_url_parse(&lexbor_parser, lexbor_base_url, (unsigned char *) ZSTR_VAL(uri_str), ZSTR_LEN(uri_str));
569+
lxb_url_t *url = lxb_url_parse(&lexbor_parser, lexbor_base_url, (unsigned char *) uri_str, uri_str_len);
570570
const char *reason = fill_errors(errors);
571571

572572
if (url == NULL && !silent) {
@@ -577,9 +577,9 @@ lxb_url_t *lexbor_parse_uri_ex(const zend_string *uri_str, const lxb_url_t *lexb
577577
return url;
578578
}
579579

580-
static void *lexbor_parse_uri(const zend_string *uri_str, const void *base_url, zval *errors, bool silent)
580+
static void *lexbor_parse_uri(const char *uri_str, size_t uri_str_len, const void *base_url, zval *errors, bool silent)
581581
{
582-
return lexbor_parse_uri_ex(uri_str, base_url, errors, silent);
582+
return lexbor_parse_uri_ex(uri_str, uri_str_len, base_url, errors, silent);
583583
}
584584

585585
static void *lexbor_clone_uri(void *uri)

ext/uri/php_lexbor.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@
2222

2323
extern const uri_handler_t lexbor_uri_handler;
2424

25-
lxb_url_t *lexbor_parse_uri_ex(const zend_string *uri_str, const lxb_url_t *lexbor_base_url, zval *errors, bool silent);
25+
lxb_url_t *lexbor_parse_uri_ex(const char *uri_str, size_t uri_str_len, const lxb_url_t *lexbor_base_url, zval *errors, bool silent);
2626

2727
zend_result lexbor_request_init(void);
2828
void lexbor_request_shutdown(void);

ext/uri/php_uri.c

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -115,11 +115,11 @@ PHPAPI uri_handler_t *php_uri_get_handler(const zend_string *uri_handler_name)
115115
return uri_handler_by_name(ZSTR_VAL(uri_handler_name), ZSTR_LEN(uri_handler_name));
116116
}
117117

118-
ZEND_ATTRIBUTE_NONNULL PHPAPI uri_internal_t *php_uri_parse(const uri_handler_t *uri_handler, zend_string *uri_str, bool silent)
118+
ZEND_ATTRIBUTE_NONNULL PHPAPI uri_internal_t *php_uri_parse(const uri_handler_t *uri_handler, const char *uri_str, size_t uri_str_len, bool silent)
119119
{
120120
uri_internal_t *internal_uri = emalloc(sizeof(*internal_uri));
121121
internal_uri->handler = uri_handler;
122-
internal_uri->uri = uri_handler->parse_uri(uri_str, NULL, NULL, silent);
122+
internal_uri->uri = uri_handler->parse_uri(uri_str, uri_str_len, NULL, NULL, silent);
123123

124124
if (UNEXPECTED(internal_uri->uri == NULL)) {
125125
efree(internal_uri);
@@ -188,9 +188,9 @@ ZEND_ATTRIBUTE_NONNULL PHPAPI void php_uri_free(uri_internal_t *internal_uri)
188188
}
189189

190190
ZEND_ATTRIBUTE_NONNULL PHPAPI php_uri *php_uri_parse_to_struct(
191-
const uri_handler_t *uri_handler, zend_string *uri_str, uri_component_read_mode_t read_mode, bool silent
191+
const uri_handler_t *uri_handler, const char *uri_str, size_t uri_str_len, uri_component_read_mode_t read_mode, bool silent
192192
) {
193-
uri_internal_t *uri_internal = php_uri_parse(uri_handler, uri_str, silent);
193+
uri_internal_t *uri_internal = php_uri_parse(uri_handler, uri_str, uri_str_len, silent);
194194
if (uri_internal == NULL) {
195195
return NULL;
196196
}
@@ -346,7 +346,7 @@ ZEND_ATTRIBUTE_NONNULL_ARGS(1, 2) PHPAPI void php_uri_instantiate_uri(
346346
base_url = internal_base_url->uri;
347347
}
348348

349-
void *uri = handler->parse_uri(uri_str, base_url, should_throw || errors_zv != NULL ? &errors : NULL, !should_throw);
349+
void *uri = handler->parse_uri(ZSTR_VAL(uri_str), ZSTR_LEN(uri_str), base_url, should_throw || errors_zv != NULL ? &errors : NULL, !should_throw);
350350
if (UNEXPECTED(uri == NULL)) {
351351
if (should_throw) {
352352
zval_ptr_dtor(&errors);
@@ -769,7 +769,7 @@ static void uri_unserialize(INTERNAL_FUNCTION_PARAMETERS, const char *handler_na
769769
if (internal_uri->uri != NULL) {
770770
internal_uri->handler->free_uri(internal_uri->uri);
771771
}
772-
internal_uri->uri = internal_uri->handler->parse_uri(Z_STR_P(uri_zv), NULL, NULL, true);
772+
internal_uri->uri = internal_uri->handler->parse_uri(Z_STRVAL_P(uri_zv), Z_STRLEN_P(uri_zv), NULL, NULL, true);
773773
if (internal_uri->uri == NULL) {
774774
zend_throw_exception_ex(NULL, 0, "Invalid serialization data for %s object", ZSTR_VAL(object->ce->name));
775775
RETURN_THROWS();

ext/uri/php_uri.h

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,7 @@ typedef struct {
3434
} php_uri;
3535

3636
PHPAPI uri_handler_t *php_uri_get_handler(const zend_string *uri_handler_name);
37-
ZEND_ATTRIBUTE_NONNULL PHPAPI uri_internal_t *php_uri_parse(const uri_handler_t *uri_handler, zend_string *uri_str, bool silent);
37+
ZEND_ATTRIBUTE_NONNULL PHPAPI uri_internal_t *php_uri_parse(const uri_handler_t *uri_handler, const char *uri_str, size_t uri_str_len, bool silent);
3838
ZEND_ATTRIBUTE_NONNULL PHPAPI zend_result php_uri_get_scheme(const uri_internal_t *internal_uri, uri_component_read_mode_t read_mode, zval *zv);
3939
ZEND_ATTRIBUTE_NONNULL PHPAPI zend_result php_uri_get_username(const uri_internal_t *internal_uri, uri_component_read_mode_t read_mode, zval *zv);
4040
ZEND_ATTRIBUTE_NONNULL PHPAPI zend_result php_uri_get_password(const uri_internal_t *internal_uri, uri_component_read_mode_t read_mode, zval *zv);
@@ -44,7 +44,9 @@ ZEND_ATTRIBUTE_NONNULL PHPAPI zend_result php_uri_get_path(const uri_internal_t
4444
ZEND_ATTRIBUTE_NONNULL PHPAPI zend_result php_uri_get_query(const uri_internal_t *internal_uri, uri_component_read_mode_t read_mode, zval *zv);
4545
ZEND_ATTRIBUTE_NONNULL PHPAPI zend_result php_uri_get_fragment(const uri_internal_t *internal_uri, uri_component_read_mode_t read_mode, zval *zv);
4646
ZEND_ATTRIBUTE_NONNULL PHPAPI void php_uri_free(uri_internal_t *internal_uri);
47-
ZEND_ATTRIBUTE_NONNULL PHPAPI php_uri *php_uri_parse_to_struct(const uri_handler_t *uri_handler, zend_string *uri_str, uri_component_read_mode_t read_mode, bool silent);
47+
ZEND_ATTRIBUTE_NONNULL PHPAPI php_uri *php_uri_parse_to_struct(
48+
const uri_handler_t *uri_handler, const char *uri_str, size_t uri_str_len, uri_component_read_mode_t read_mode, bool silent
49+
);
4850
ZEND_ATTRIBUTE_NONNULL PHPAPI void php_uri_struct_free(php_uri *uri);
4951

5052
ZEND_ATTRIBUTE_NONNULL_ARGS(1, 2) PHPAPI void php_uri_instantiate_uri(

0 commit comments

Comments
 (0)