23
23
static void uriparser_free_uri (void * uri );
24
24
static void throw_invalid_uri_exception (void );
25
25
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
+
26
65
static inline size_t get_text_range_length (const UriTextRangeA * range )
27
66
{
28
67
return range -> afterLast - range -> first ;
29
68
}
30
69
31
70
ZEND_ATTRIBUTE_NONNULL static void uriparser_copy_uri (UriUriA * new_uriparser_uri , const UriUriA * uriparser_uri )
32
71
{
33
- int result = uriCopyUriA (new_uriparser_uri , uriparser_uri );
72
+ int result = uriCopyUriMmA (new_uriparser_uri , uriparser_uri , mm );
34
73
ZEND_ASSERT (result == URI_SUCCESS );
35
74
}
36
75
37
76
ZEND_ATTRIBUTE_NONNULL static UriUriA * get_normalized_uri (uriparser_uris_t * uriparser_uris ) {
38
77
if (!uriparser_uris -> normalized_uri_initialized ) {
39
78
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 );
41
80
ZEND_ASSERT (result == URI_SUCCESS );
42
81
uriparser_uris -> normalized_uri_initialized = true;
43
82
}
@@ -237,43 +276,12 @@ ZEND_ATTRIBUTE_NONNULL static zend_result uriparser_read_fragment(const uri_inte
237
276
return SUCCESS ;
238
277
}
239
278
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
-
265
279
PHP_MINIT_FUNCTION (uri_uriparser )
266
280
{
267
281
if (uri_handler_register (& uriparser_uri_handler ) == FAILURE ) {
268
282
return FAILURE ;
269
283
}
270
284
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
-
277
285
return SUCCESS ;
278
286
}
279
287
@@ -293,7 +301,7 @@ static void throw_invalid_uri_exception(void)
293
301
#define PARSE_URI (dest_uri , uri_str , uriparser_uris , silent ) \
294
302
do { \
295
303
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 \
297
305
) { \
298
306
efree(uriparser_uris); \
299
307
if (!silent) { \
@@ -309,24 +317,24 @@ void *uriparser_parse_uri_ex(const zend_string *uri_str, const uriparser_uris_t
309
317
310
318
if (uriparser_base_urls == NULL ) {
311
319
PARSE_URI (& uriparser_uris -> uri , uri_str , uriparser_uris , silent );
312
- uriMakeOwnerA (& uriparser_uris -> uri );
320
+ uriMakeOwnerMmA (& uriparser_uris -> uri , mm );
313
321
} else {
314
322
UriUriA uri ;
315
323
316
324
PARSE_URI (& uri , uri_str , uriparser_uris , silent );
317
325
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 ) {
319
327
efree (uriparser_uris );
320
- uriFreeUriMembersA (& uri );
328
+ uriFreeUriMembersMmA (& uri , mm );
321
329
if (!silent ) {
322
330
throw_invalid_uri_exception ();
323
331
}
324
332
325
333
return NULL ;
326
334
}
327
335
328
- uriMakeOwnerA (& uriparser_uris -> uri );
329
- uriFreeUriMembersA (& uri );
336
+ uriMakeOwnerMmA (& uriparser_uris -> uri , mm );
337
+ uriFreeUriMembersMmA (& uri , mm );
330
338
}
331
339
332
340
return uriparser_uris ;
@@ -390,8 +398,8 @@ ZEND_ATTRIBUTE_NONNULL static void uriparser_free_uri(void *uri)
390
398
{
391
399
uriparser_uris_t * uriparser_uris = uri ;
392
400
393
- uriFreeUriMembersA (& uriparser_uris -> uri );
394
- uriFreeUriMembersA (& uriparser_uris -> normalized_uri );
401
+ uriFreeUriMembersMmA (& uriparser_uris -> uri , mm );
402
+ uriFreeUriMembersMmA (& uriparser_uris -> normalized_uri , mm );
395
403
396
404
efree (uriparser_uris );
397
405
}
0 commit comments