Skip to content

Commit 509b6d5

Browse files
committed
Review fixes
1 parent a81ba2e commit 509b6d5

File tree

4 files changed

+12
-26
lines changed

4 files changed

+12
-26
lines changed

NEWS

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -64,6 +64,7 @@ PHP NEWS
6464
. Avoid double conversion to string in php_userstreamop_readdir(). (nielsdos)
6565

6666
- URI:
67+
. Added support for Uri\Rfc3986\Uri::with*() methods. (kocsismate)
6768
. Fixed memory management of Uri\WhatWg\Url objects. (timwolla)
6869
. Fixed memory management of the internal "parse_url" URI parser.
6970
(timwolla)

ext/uri/php_uri.c

Lines changed: 9 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -541,21 +541,25 @@ PHP_METHOD(Uri_Rfc3986_Uri, withUserInfo)
541541
ZVAL_STR(&zv, value);
542542
}
543543

544+
zend_object *old_object = Z_OBJ_P(ZEND_THIS);
544545
uri_internal_t *internal_uri = Z_URI_INTERNAL_P(ZEND_THIS);
545546
URI_ASSERT_INITIALIZATION(internal_uri);
546547

547-
zend_object *new_object = uri_clone_obj_handler(Z_OBJ_P(ZEND_THIS));
548-
ZEND_ASSERT(new_object != NULL);
548+
zend_object *new_object = old_object->handlers->clone_obj(old_object);
549+
if (new_object == NULL) {
550+
RETURN_THROWS();
551+
}
552+
553+
/* Assign the object early. The engine will take care of destruction in
554+
* case of an exception being thrown. */
555+
RETVAL_OBJ(new_object);
549556

550557
uri_internal_t *new_internal_uri = uri_internal_from_obj(new_object);
551558
URI_ASSERT_INITIALIZATION(new_internal_uri);
552559

553560
if (UNEXPECTED(php_uri_parser_rfc3986_userinfo_write(new_internal_uri, &zv, NULL) == FAILURE)) {
554-
zend_object_release(new_object);
555561
RETURN_THROWS();
556562
}
557-
558-
RETVAL_OBJ(new_object);
559563
}
560564

561565
PHP_METHOD(Uri_Rfc3986_Uri, getUsername)

ext/uri/tests/026.phpt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,7 @@ try {
4242
}
4343

4444
try {
45-
$uri3->withHost("t:s/t.com"); // t:s/t.com
45+
$uri3->withHost("t:s/t.com");
4646
} catch (Uri\InvalidUriException $e) {
4747
echo $e->getMessage() . "\n";
4848
}

ext/uri/uri_parser_rfc3986.c

Lines changed: 1 addition & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -106,14 +106,6 @@ ZEND_ATTRIBUTE_NONNULL static UriUriA *get_uri_for_writing(uri_internal_t *inter
106106
return &uriparser_uris->uri;
107107
}
108108

109-
ZEND_ATTRIBUTE_NONNULL static void reset_normalized_uri_after_writing(uri_internal_t *internal_uri)
110-
{
111-
php_uri_parser_rfc3986_uris *uriparser_uris = internal_uri->uri;
112-
113-
uriFreeUriMembersMmA(&uriparser_uris->normalized_uri, mm);
114-
uriparser_uris->normalized_uri_initialized = false;
115-
}
116-
117109
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)
118110
{
119111
const UriUriA *uriparser_uri = get_uri_for_reading(internal_uri->uri, read_mode);
@@ -143,8 +135,6 @@ static zend_result php_uri_parser_rfc3986_scheme_write(struct uri_internal_t *in
143135
return FAILURE;
144136
}
145137

146-
reset_normalized_uri_after_writing(internal_uri);
147-
148138
return SUCCESS;
149139
}
150140

@@ -174,7 +164,6 @@ zend_result php_uri_parser_rfc3986_userinfo_write(struct uri_internal_t *interna
174164

175165
switch (result) {
176166
case URI_SUCCESS:
177-
reset_normalized_uri_after_writing(internal_uri);
178167
return SUCCESS;
179168
case URI_ERROR_SETUSERINFO_HOST_NOT_SET:
180169
zend_throw_exception(uri_invalid_uri_exception_ce, "Cannot set a userinfo without having a host", 0);
@@ -263,7 +252,6 @@ static zend_result php_uri_parser_rfc3986_host_write(struct uri_internal_t *inte
263252

264253
switch (result) {
265254
case URI_SUCCESS:
266-
reset_normalized_uri_after_writing(internal_uri);
267255
return SUCCESS;
268256
case URI_ERROR_SETHOST_PORT_SET:
269257
zend_throw_exception(uri_invalid_uri_exception_ce, "Cannot remove the host from a URI that has a port", 0);
@@ -318,12 +306,11 @@ static zend_result php_uri_parser_rfc3986_port_write(struct uri_internal_t *inte
318306
} else {
319307
zend_string *tmp = zend_long_to_str(Z_LVAL_P(value));
320308
result = uriSetPortTextMmA(uriparser_uri, ZSTR_VAL(tmp), ZSTR_VAL(tmp) + ZSTR_LEN(tmp), mm);
321-
zend_string_release(tmp);
309+
zend_string_release_ex(tmp, false);
322310
}
323311

324312
switch (result) {
325313
case URI_SUCCESS:
326-
reset_normalized_uri_after_writing(internal_uri);
327314
return SUCCESS;
328315
case URI_ERROR_SETPORT_HOST_NOT_SET:
329316
zend_throw_exception(uri_invalid_uri_exception_ce, "Cannot set a port without having a host", 0);
@@ -378,8 +365,6 @@ static zend_result php_uri_parser_rfc3986_path_write(struct uri_internal_t *inte
378365
return FAILURE;
379366
}
380367

381-
reset_normalized_uri_after_writing(internal_uri);
382-
383368
return SUCCESS;
384369
}
385370

@@ -412,8 +397,6 @@ static zend_result php_uri_parser_rfc3986_query_write(struct uri_internal_t *int
412397
return FAILURE;
413398
}
414399

415-
reset_normalized_uri_after_writing(internal_uri);
416-
417400
return SUCCESS;
418401
}
419402

@@ -446,8 +429,6 @@ static zend_result php_uri_parser_rfc3986_fragment_write(struct uri_internal_t *
446429
return FAILURE;
447430
}
448431

449-
reset_normalized_uri_after_writing(internal_uri);
450-
451432
return SUCCESS;
452433
}
453434

0 commit comments

Comments
 (0)