Skip to content

Commit aca597c

Browse files
committed
uri: Simplify memory-management in php_uri_parse()
We can try parsing before allocating the `uri_internal_t` struct.
1 parent b27d919 commit aca597c

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
@@ -118,15 +118,16 @@ PHPAPI uri_parser_t *php_uri_get_parser(const zend_string *uri_parser_name)
118118

119119
ZEND_ATTRIBUTE_NONNULL PHPAPI uri_internal_t *php_uri_parse(const uri_parser_t *uri_parser, const char *uri_str, size_t uri_str_len, bool silent)
120120
{
121-
uri_internal_t *internal_uri = emalloc(sizeof(*internal_uri));
122-
internal_uri->parser = uri_parser;
123-
internal_uri->uri = uri_parser->parse_uri(uri_str, uri_str_len, NULL, NULL, silent);
121+
void *parsed = uri_parser->parse_uri(uri_str, uri_str_len, NULL, NULL, silent);
124122

125-
if (UNEXPECTED(internal_uri->uri == NULL)) {
126-
efree(internal_uri);
123+
if (parsed == NULL) {
127124
return NULL;
128125
}
129126

127+
uri_internal_t *internal_uri = emalloc(sizeof(*internal_uri));
128+
internal_uri->parser = uri_parser;
129+
internal_uri->uri = parsed;
130+
130131
return internal_uri;
131132
}
132133

0 commit comments

Comments
 (0)