@@ -28,73 +28,15 @@ static inline size_t get_text_range_length(const UriTextRangeA *range)
28
28
return range -> afterLast - range -> first ;
29
29
}
30
30
31
- static void uriparser_copy_text_range (UriTextRangeA * text_range , UriTextRangeA * new_text_range , bool use_safe )
32
- {
33
- if (text_range -> first == NULL || text_range -> afterLast == NULL || (text_range -> first > text_range -> afterLast && !use_safe )) {
34
- new_text_range -> first = NULL ;
35
- new_text_range -> afterLast = NULL ;
36
- } else if (text_range -> first >= text_range -> afterLast && use_safe ) {
37
- new_text_range -> first = uriSafeToPointToA ;
38
- new_text_range -> afterLast = uriSafeToPointToA ;
39
- } else {
40
- size_t length = get_text_range_length (text_range );
41
- char * dup = emalloc (length );
42
- memcpy (dup , text_range -> first , length );
43
-
44
- new_text_range -> first = dup ;
45
- new_text_range -> afterLast = dup + length ;
46
- }
47
- }
48
-
49
31
static UriUriA * uriparser_copy_uri (UriUriA * uriparser_uri ) // TODO add to uriparser
50
32
{
51
33
UriUriA * new_uriparser_uri = emalloc (sizeof (UriUriA ));
52
34
53
- uriparser_copy_text_range (& uriparser_uri -> scheme , & new_uriparser_uri -> scheme , false);
54
- uriparser_copy_text_range (& uriparser_uri -> userInfo , & new_uriparser_uri -> userInfo , false);
55
- uriparser_copy_text_range (& uriparser_uri -> hostText , & new_uriparser_uri -> hostText , true);
56
- if (uriparser_uri -> hostData .ip4 == NULL ) {
57
- new_uriparser_uri -> hostData .ip4 = NULL ;
58
- } else {
59
- new_uriparser_uri -> hostData .ip4 = emalloc (sizeof (UriIp4 ));
60
- * (new_uriparser_uri -> hostData .ip4 ) = * (uriparser_uri -> hostData .ip4 );
61
- }
62
- if (uriparser_uri -> hostData .ip6 == NULL ) {
63
- new_uriparser_uri -> hostData .ip6 = NULL ;
64
- } else {
65
- new_uriparser_uri -> hostData .ip6 = emalloc (sizeof (UriIp6 ));
66
- * (new_uriparser_uri -> hostData .ip6 ) = * (uriparser_uri -> hostData .ip6 );
67
- }
68
- uriparser_copy_text_range (& uriparser_uri -> hostData .ipFuture , & new_uriparser_uri -> hostData .ipFuture , false);
69
- uriparser_copy_text_range (& uriparser_uri -> portText , & new_uriparser_uri -> portText , false);
70
-
71
- if (uriparser_uri -> pathHead != NULL && uriparser_uri -> pathTail != NULL ) {
72
- new_uriparser_uri -> pathHead = emalloc (sizeof (UriPathSegmentA ));
73
- uriparser_copy_text_range (& uriparser_uri -> pathHead -> text , & new_uriparser_uri -> pathHead -> text , true);
74
- new_uriparser_uri -> pathHead -> reserved = NULL ;
75
-
76
- UriPathSegmentA * p = uriparser_uri -> pathHead -> next ;
77
- UriPathSegmentA * new_p = new_uriparser_uri -> pathHead ;
78
- while (p != NULL && (p -> text .first != p -> text .afterLast || p -> text .first == uriSafeToPointToA )) {
79
- new_p -> next = emalloc (sizeof (UriPathSegmentA ));
80
- new_p = new_p -> next ;
81
- uriparser_copy_text_range (& p -> text , & new_p -> text , true);
82
- new_p -> reserved = NULL ;
83
- p = p -> next ;
84
- }
85
- new_p -> next = NULL ;
86
- new_uriparser_uri -> pathTail = new_p ;
87
- } else {
88
- new_uriparser_uri -> pathHead = NULL ;
89
- new_uriparser_uri -> pathTail = NULL ;
35
+ if (uriCopyUriA (new_uriparser_uri , uriparser_uri ) != URI_SUCCESS ) {
36
+ efree (new_uriparser_uri );
37
+ return NULL ; /* TODO check for null on call sites */
90
38
}
91
39
92
- uriparser_copy_text_range (& uriparser_uri -> query , & new_uriparser_uri -> query , false);
93
- uriparser_copy_text_range (& uriparser_uri -> fragment , & new_uriparser_uri -> fragment , false);
94
- new_uriparser_uri -> absolutePath = uriparser_uri -> absolutePath ;
95
- new_uriparser_uri -> owner = true;
96
- new_uriparser_uri -> reserved = NULL ;
97
-
98
40
return new_uriparser_uri ;
99
41
}
100
42
@@ -407,7 +349,7 @@ void *uriparser_parse_uri_ex(const zend_string *uri_str, const uriparser_uris_t
407
349
408
350
UriUriA * absolute_uri = emalloc (sizeof (UriUriA ));
409
351
410
- if (uriAddBaseUriExA (absolute_uri , uriparser_uri , uriparser_base_urls -> uri , URI_RESOLVE_STRICTLY ) != URI_SUCCESS ) {
352
+ if (uriAddBaseUriA (absolute_uri , uriparser_uri , uriparser_base_urls -> uri ) != URI_SUCCESS ) {
411
353
uriFreeUriMembersA (uriparser_uri );
412
354
efree (uriparser_uri );
413
355
efree (absolute_uri );
0 commit comments