Skip to content

Commit 84c7c03

Browse files
authored
uri: Simplify memory-management in php_uri_parse() (php#19928)
We can try parsing before allocating the `uri_internal_t` struct.
1 parent ff86c59 commit 84c7c03

File tree

1 file changed

+6
-5
lines changed

1 file changed

+6
-5
lines changed

ext/uri/php_uri.c

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -111,15 +111,16 @@ PHPAPI const php_uri_parser *php_uri_get_parser(zend_string *uri_parser_name)
111111

112112
ZEND_ATTRIBUTE_NONNULL PHPAPI php_uri_internal *php_uri_parse(const php_uri_parser *uri_parser, const char *uri_str, size_t uri_str_len, bool silent)
113113
{
114-
php_uri_internal *internal_uri = emalloc(sizeof(*internal_uri));
115-
internal_uri->parser = uri_parser;
116-
internal_uri->uri = uri_parser->parse(uri_str, uri_str_len, NULL, NULL, silent);
114+
void *uri = uri_parser->parse(uri_str, uri_str_len, NULL, NULL, silent);
117115

118-
if (UNEXPECTED(internal_uri->uri == NULL)) {
119-
efree(internal_uri);
116+
if (uri == NULL) {
120117
return NULL;
121118
}
122119

120+
php_uri_internal *internal_uri = emalloc(sizeof(*internal_uri));
121+
internal_uri->parser = uri_parser;
122+
internal_uri->uri = uri;
123+
123124
return internal_uri;
124125
}
125126

0 commit comments

Comments
 (0)