2323static  void  uriparser_free_uri (void  * uri );
2424static  void  throw_invalid_uri_exception (void );
2525
26+ static  void  * uriparser_malloc (UriMemoryManager  * memory_manager , size_t  size )
27+ {
28+ 	return  emalloc (size );
29+ }
30+ 
31+ static  void  * uriparser_calloc (UriMemoryManager  * memory_manager , size_t  nmemb , size_t  size )
32+ {
33+ 	return  ecalloc (nmemb , size );
34+ }
35+ 
36+ static  void  * uriparser_realloc (UriMemoryManager  * memory_manager , void  * ptr , size_t  size )
37+ {
38+ 	return  erealloc (ptr , size );
39+ }
40+ 
41+ static  void  * uriparser_reallocarray (UriMemoryManager  * memory_manager , void  * ptr , size_t  nmemb , size_t  size )
42+ {
43+ 	return  safe_erealloc (ptr , nmemb , size , 0 );
44+ }
45+ 
46+ static  void  uriparser_free (UriMemoryManager  * memory_manager , void  * ptr )
47+ {
48+ 	efree (ptr );
49+ }
50+ 
51+ static  const  UriMemoryManager  uriparser_mm  =  {
52+ 	.malloc  =  uriparser_malloc ,
53+ 	.calloc  =  uriparser_calloc ,
54+ 	.realloc  =  uriparser_realloc ,
55+ 	.reallocarray  =  uriparser_reallocarray ,
56+ 	.free  =  uriparser_free ,
57+ 	.userData  =  NULL ,
58+ };
59+ 
60+ /* The library expects a pointer to a non-const UriMemoryManager, but does 
61+  * not actually modify it (and neither does our implementation). Use a 
62+  * const struct with a non-const pointer for convenience. */ 
63+ static  UriMemoryManager *  const  mm  =  (UriMemoryManager * )& uriparser_mm ;
64+ 
2665static  inline  size_t  get_text_range_length (const  UriTextRangeA  * range )
2766{
2867	return  range -> afterLast  -  range -> first ;
2968}
3069
3170ZEND_ATTRIBUTE_NONNULL  static  void  uriparser_copy_uri (UriUriA  * new_uriparser_uri , const  UriUriA  * uriparser_uri )
3271{
33- 	int  result  =  uriCopyUriA (new_uriparser_uri , uriparser_uri );
72+ 	int  result  =  uriCopyUriMmA (new_uriparser_uri , uriparser_uri ,  mm );
3473	ZEND_ASSERT (result  ==  URI_SUCCESS );
3574}
3675
3776ZEND_ATTRIBUTE_NONNULL  static  UriUriA  * get_normalized_uri (uriparser_uris_t  * uriparser_uris ) {
3877	if  (!uriparser_uris -> normalized_uri_initialized ) {
3978		uriparser_copy_uri (& uriparser_uris -> normalized_uri , & uriparser_uris -> uri );
40- 		int  result  =  uriNormalizeSyntaxExA (& uriparser_uris -> normalized_uri , (unsigned int  )-1 );
79+ 		int  result  =  uriNormalizeSyntaxExMmA (& uriparser_uris -> normalized_uri , (unsigned int  )-1 ,  mm );
4180		ZEND_ASSERT (result  ==  URI_SUCCESS );
4281		uriparser_uris -> normalized_uri_initialized  =  true;
4382	}
@@ -237,43 +276,12 @@ ZEND_ATTRIBUTE_NONNULL static zend_result uriparser_read_fragment(const uri_inte
237276	return  SUCCESS ;
238277}
239278
240- static  void  * uriparser_malloc (UriMemoryManager  * memory_manager , size_t  size )
241- {
242- 	return  emalloc (size );
243- }
244- 
245- static  void  * uriparser_calloc (UriMemoryManager  * memory_manager , size_t  nmemb , size_t  size )
246- {
247- 	return  ecalloc (nmemb , size );
248- }
249- 
250- static  void  * uriparser_realloc (UriMemoryManager  * memory_manager , void  * ptr , size_t  size )
251- {
252- 	return  erealloc (ptr , size );
253- }
254- 
255- static  void  * uriparser_reallocarray (UriMemoryManager  * memory_manager , void  * ptr , size_t  nmemb , size_t  size )
256- {
257- 	return  safe_erealloc (ptr , nmemb , size , 0 );
258- }
259- 
260- static  void  uriparser_free (UriMemoryManager  * memory_manager , void  * ptr )
261- {
262- 	efree (ptr );
263- }
264- 
265279PHP_MINIT_FUNCTION (uri_uriparser )
266280{
267281	if  (uri_handler_register (& uriparser_uri_handler ) ==  FAILURE ) {
268282		return  FAILURE ;
269283	}
270284
271- 	defaultMemoryManager .malloc  =  uriparser_malloc ;
272- 	defaultMemoryManager .calloc  =  uriparser_calloc ;
273- 	defaultMemoryManager .realloc  =  uriparser_realloc ;
274- 	defaultMemoryManager .reallocarray  =  uriparser_reallocarray ;
275- 	defaultMemoryManager .free  =  uriparser_free ;
276- 
277285	return  SUCCESS ;
278286}
279287
@@ -293,7 +301,7 @@ static void throw_invalid_uri_exception(void)
293301#define  PARSE_URI (dest_uri , uri_str , uriparser_uris , silent ) \
294302	do { \
295303		if (ZSTR_LEN(uri_str) == 0 || \
296- 			uriParseSingleUriExA (dest_uri, ZSTR_VAL(uri_str), ZSTR_VAL(uri_str) + ZSTR_LEN(uri_str), NULL) != URI_SUCCESS \
304+ 			uriParseSingleUriExMmA (dest_uri, ZSTR_VAL(uri_str), ZSTR_VAL(uri_str) + ZSTR_LEN(uri_str), NULL, mm ) != URI_SUCCESS \
297305		) { \
298306			efree(uriparser_uris); \
299307			if (!silent) { \
@@ -309,24 +317,24 @@ void *uriparser_parse_uri_ex(const zend_string *uri_str, const uriparser_uris_t
309317
310318	if  (uriparser_base_urls  ==  NULL ) {
311319		PARSE_URI (& uriparser_uris -> uri , uri_str , uriparser_uris , silent );
312- 		uriMakeOwnerA (& uriparser_uris -> uri );
320+ 		uriMakeOwnerMmA (& uriparser_uris -> uri ,  mm );
313321	} else  {
314322		UriUriA  uri ;
315323
316324		PARSE_URI (& uri , uri_str , uriparser_uris , silent );
317325
318- 		if  (uriAddBaseUriA (& uriparser_uris -> uri , & uri , & uriparser_base_urls -> uri ) !=  URI_SUCCESS ) {
326+ 		if  (uriAddBaseUriExMmA (& uriparser_uris -> uri , & uri , & uriparser_base_urls -> uri ,  URI_RESOLVE_STRICTLY ,  mm ) !=  URI_SUCCESS ) {
319327			efree (uriparser_uris );
320- 			uriFreeUriMembersA (& uri );
328+ 			uriFreeUriMembersMmA (& uri ,  mm );
321329			if  (!silent ) {
322330				throw_invalid_uri_exception ();
323331			}
324332
325333			return  NULL ;
326334		}
327335
328- 		uriMakeOwnerA (& uriparser_uris -> uri );
329- 		uriFreeUriMembersA (& uri );
336+ 		uriMakeOwnerMmA (& uriparser_uris -> uri ,  mm );
337+ 		uriFreeUriMembersMmA (& uri ,  mm );
330338	}
331339
332340	return  uriparser_uris ;
@@ -390,8 +398,8 @@ ZEND_ATTRIBUTE_NONNULL static void uriparser_free_uri(void *uri)
390398{
391399	uriparser_uris_t  * uriparser_uris  =  uri ;
392400
393- 	uriFreeUriMembersA (& uriparser_uris -> uri );
394- 	uriFreeUriMembersA (& uriparser_uris -> normalized_uri );
401+ 	uriFreeUriMembersMmA (& uriparser_uris -> uri ,  mm );
402+ 	uriFreeUriMembersMmA (& uriparser_uris -> normalized_uri ,  mm );
395403
396404	efree (uriparser_uris );
397405}
0 commit comments