@@ -42,13 +42,14 @@ static void uriparser_normalize_uri(UriUriA *uriparser_uri)
42
42
ZEND_ASSERT (result == URI_SUCCESS );
43
43
}
44
44
45
- static void normalize_uri_if_needed (uriparser_uris_t * uriparser_uris )
46
- {
47
- if (uriparser_uris -> normalized_uri_initialized == false) {
45
+ static UriUriA * get_normalized_uri (uriparser_uris_t * uriparser_uris ) {
46
+ if (!uriparser_uris -> normalized_uri_initialized ) {
48
47
uriparser_copy_uri (& uriparser_uris -> normalized_uri , & uriparser_uris -> uri );
49
48
uriparser_normalize_uri (& uriparser_uris -> normalized_uri );
50
49
uriparser_uris -> normalized_uri_initialized = true;
51
50
}
51
+
52
+ return & uriparser_uris -> normalized_uri ;
52
53
}
53
54
54
55
static UriUriA * uriparser_read_uri (uriparser_uris_t * uriparser_uris , uri_component_read_mode_t read_mode )
@@ -59,9 +60,7 @@ static UriUriA *uriparser_read_uri(uriparser_uris_t *uriparser_uris, uri_compone
59
60
case URI_COMPONENT_READ_NORMALIZED_ASCII :
60
61
ZEND_FALLTHROUGH ;
61
62
case URI_COMPONENT_READ_NORMALIZED_UNICODE :
62
- normalize_uri_if_needed (uriparser_uris );
63
-
64
- return & uriparser_uris -> normalized_uri ;
63
+ return get_normalized_uri (uriparser_uris );
65
64
EMPTY_SWITCH_DEFAULT_CASE ()
66
65
}
67
66
}
@@ -102,7 +101,7 @@ static zend_result uriparser_read_username(const uri_internal_t *internal_uri, u
102
101
103
102
if (uriparser_uri -> userInfo .first != NULL && uriparser_uri -> userInfo .afterLast != NULL ) {
104
103
size_t length = get_text_range_length (& uriparser_uri -> userInfo );
105
- char * c = memchr (uriparser_uri -> userInfo .first , ':' , length );
104
+ const char * c = memchr (uriparser_uri -> userInfo .first , ':' , length );
106
105
107
106
if (c == NULL && length > 0 ) {
108
107
ZVAL_STRINGL (retval , uriparser_uri -> userInfo .first , length );
@@ -145,6 +144,7 @@ static zend_result uriparser_read_host(const uri_internal_t *internal_uri, uri_c
145
144
146
145
if (uriparser_uri -> hostText .first != NULL && uriparser_uri -> hostText .afterLast != NULL && get_text_range_length (& uriparser_uri -> hostText ) > 0 ) {
147
146
if (uriparser_uri -> hostData .ip6 != NULL || uriparser_uri -> hostData .ipFuture .first != NULL ) {
147
+ /* the textual representation of the host is always accessible in the .hostText field no matter what the host is */
148
148
smart_str host_str = {0 };
149
149
150
150
smart_str_appendc (& host_str , '[' );
@@ -162,7 +162,7 @@ static zend_result uriparser_read_host(const uri_internal_t *internal_uri, uri_c
162
162
return SUCCESS ;
163
163
}
164
164
165
- static int str_to_int (const char * str , int len )
165
+ static size_t str_to_int (const char * str , size_t len )
166
166
{
167
167
int result = 0 ;
168
168
@@ -287,7 +287,7 @@ PHP_MINIT_FUNCTION(uri_uriparser)
287
287
288
288
static uriparser_uris_t * uriparser_create_uris (void )
289
289
{
290
- uriparser_uris_t * uriparser_uris = emalloc ( sizeof (* uriparser_uris ));
290
+ uriparser_uris_t * uriparser_uris = ecalloc ( 1 , sizeof (* uriparser_uris ));
291
291
uriparser_uris -> normalized_uri_initialized = false;
292
292
293
293
return uriparser_uris ;
@@ -325,6 +325,7 @@ void *uriparser_parse_uri_ex(const zend_string *uri_str, const uriparser_uris_t
325
325
326
326
if (uriAddBaseUriA (& uriparser_uris -> uri , & uri , & uriparser_base_urls -> uri ) != URI_SUCCESS ) {
327
327
efree (uriparser_uris );
328
+ uriFreeUriMembersA (& uri );
328
329
if (!silent ) {
329
330
throw_invalid_uri_exception ();
330
331
}
@@ -350,7 +351,7 @@ void *uriparser_parse_uri(const zend_string *uri_str, const void *base_url, zval
350
351
* is discarded altogether. */
351
352
static void * uriparser_clone_uri (void * uri )
352
353
{
353
- uriparser_uris_t * uriparser_uris = ( uriparser_uris_t * ) uri ;
354
+ uriparser_uris_t * uriparser_uris = uri ;
354
355
355
356
uriparser_uris_t * new_uriparser_uris = uriparser_create_uris ();
356
357
uriparser_copy_uri (& new_uriparser_uris -> uri , & uriparser_uris -> uri );
@@ -364,15 +365,13 @@ static void *uriparser_clone_uri(void *uri)
364
365
365
366
static zend_string * uriparser_uri_to_string (void * uri , uri_recomposition_mode_t recomposition_mode , bool exclude_fragment )
366
367
{
367
- uriparser_uris_t * uriparser_uris = ( uriparser_uris_t * ) uri ;
368
+ uriparser_uris_t * uriparser_uris = uri ;
368
369
UriUriA * uriparser_uri ;
369
370
370
371
if (recomposition_mode == URI_RECOMPOSITION_RAW_ASCII || recomposition_mode == URI_RECOMPOSITION_RAW_UNICODE ) {
371
372
uriparser_uri = & uriparser_uris -> uri ;
372
373
} else {
373
- normalize_uri_if_needed (uriparser_uris );
374
-
375
- uriparser_uri = & uriparser_uris -> normalized_uri ;
374
+ uriparser_uri = get_normalized_uri (uriparser_uris );
376
375
}
377
376
378
377
int charsRequired = 0 ;
@@ -397,15 +396,10 @@ static zend_string *uriparser_uri_to_string(void *uri, uri_recomposition_mode_t
397
396
398
397
static void uriparser_free_uri (void * uri )
399
398
{
400
- uriparser_uris_t * uriparser_uris = ( uriparser_uris_t * ) uri ;
399
+ uriparser_uris_t * uriparser_uris = uri ;
401
400
402
401
uriFreeUriMembersA (& uriparser_uris -> uri );
403
-
404
- if (uriparser_uris -> normalized_uri_initialized ) {
405
- ZEND_ASSERT (uriparser_uris -> normalized_uri .owner );
406
-
407
- uriFreeUriMembersA (& uriparser_uris -> normalized_uri );
408
- }
402
+ uriFreeUriMembersA (& uriparser_uris -> normalized_uri );
409
403
410
404
efree (uriparser_uris );
411
405
}
0 commit comments