Skip to content

Commit 30b1b6d

Browse files
committed
Fix normalization
1 parent 1a5d94d commit 30b1b6d

File tree

2 files changed

+43
-1
lines changed

2 files changed

+43
-1
lines changed

ext/uri/tests/057.phpt

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
--TEST--
2+
Test normalization after using RFC 3986 withers
3+
--EXTENSIONS--
4+
uri
5+
--FILE--
6+
<?php
7+
8+
$uri = \Uri\Rfc3986\Uri::parse('https://example.com/path-%65xample/');
9+
var_dump($uri->getPath());
10+
var_dump($uri->getRawPath());
11+
12+
$newUri = $uri->withPath('/updated-path');
13+
var_dump($newUri->getPath());
14+
var_dump($newUri->getRawPath());
15+
16+
?>
17+
--EXPECT--
18+
string(14) "/path-example/"
19+
string(16) "/path-%65xample/"
20+
string(13) "/updated-path"
21+
string(13) "/updated-path"

ext/uri/uri_parser_rfc3986.c

Lines changed: 22 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -106,6 +106,14 @@ 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+
109117
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)
110118
{
111119
const UriUriA *uriparser_uri = get_uri_for_reading(internal_uri->uri, read_mode);
@@ -135,6 +143,8 @@ static zend_result php_uri_parser_rfc3986_scheme_write(struct uri_internal_t *in
135143
return FAILURE;
136144
}
137145

146+
reset_normalized_uri_after_writing(internal_uri);
147+
138148
return SUCCESS;
139149
}
140150

@@ -167,10 +177,11 @@ zend_result php_uri_parser_rfc3986_userinfo_write(struct uri_internal_t *interna
167177
return FAILURE;
168178
}
169179

180+
reset_normalized_uri_after_writing(internal_uri);
181+
170182
return SUCCESS;
171183
}
172184

173-
174185
ZEND_ATTRIBUTE_NONNULL static zend_result php_uri_parser_rfc3986_username_read(const uri_internal_t *internal_uri, uri_component_read_mode_t read_mode, zval *retval)
175186
{
176187
const UriUriA *uriparser_uri = get_uri_for_reading(internal_uri->uri, read_mode);
@@ -252,6 +263,8 @@ static zend_result php_uri_parser_rfc3986_host_write(struct uri_internal_t *inte
252263
return FAILURE;
253264
}
254265

266+
reset_normalized_uri_after_writing(internal_uri);
267+
255268
return SUCCESS;
256269
}
257270

@@ -296,6 +309,8 @@ static zend_result php_uri_parser_rfc3986_port_write(struct uri_internal_t *inte
296309
return FAILURE;
297310
}
298311

312+
reset_normalized_uri_after_writing(internal_uri);
313+
299314
return SUCCESS;
300315
}
301316

@@ -343,6 +358,8 @@ static zend_result php_uri_parser_rfc3986_path_write(struct uri_internal_t *inte
343358
return FAILURE;
344359
}
345360

361+
reset_normalized_uri_after_writing(internal_uri);
362+
346363
return SUCCESS;
347364
}
348365

@@ -375,6 +392,8 @@ static zend_result php_uri_parser_rfc3986_query_write(struct uri_internal_t *int
375392
return FAILURE;
376393
}
377394

395+
reset_normalized_uri_after_writing(internal_uri);
396+
378397
return SUCCESS;
379398
}
380399

@@ -407,6 +426,8 @@ static zend_result php_uri_parser_rfc3986_fragment_write(struct uri_internal_t *
407426
return FAILURE;
408427
}
409428

429+
reset_normalized_uri_after_writing(internal_uri);
430+
410431
return SUCCESS;
411432
}
412433

0 commit comments

Comments
 (0)