Skip to content

Commit 3ac9efe

Browse files
authored
uri: Make uri_parser_rfc3986.h usable for external extensions (php#20173)
This header could not previously be used due to the `uriparser/Uri.h` include, which is required for the struct definition. Since this struct is considered an implementation detail, we can just make it opaque, preserving type safety, but without allowing external users to touch its contents. Fixes php#19868.
1 parent c03215b commit 3ac9efe

File tree

3 files changed

+11
-6
lines changed

3 files changed

+11
-6
lines changed

NEWS

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -48,6 +48,8 @@ PHP NEWS
4848
- URI:
4949
. Fixed bug GH-20088 (Heap-use-after-free in PHP URI WHATWG parser
5050
during malformed URL processing). (lexborisov)
51+
. Fixed bug GH-19868 (Unable to use uri_parser_rfc3986.h from external
52+
extensions). (timwolla)
5153

5254
09 Oct 2025, PHP 8.5.0RC2
5355

ext/uri/uri_parser_rfc3986.c

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,14 @@
2020
#include "Zend/zend_smart_str.h"
2121
#include "Zend/zend_exceptions.h"
2222

23+
#include <uriparser/Uri.h>
24+
25+
struct php_uri_parser_rfc3986_uris {
26+
UriUriA uri;
27+
UriUriA normalized_uri;
28+
bool normalized_uri_initialized;
29+
};
30+
2331
static void *php_uri_parser_rfc3986_memory_manager_malloc(UriMemoryManager *memory_manager, size_t size)
2432
{
2533
return emalloc(size);

ext/uri/uri_parser_rfc3986.h

Lines changed: 1 addition & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -17,16 +17,11 @@
1717
#ifndef PHP_URI_PARSER_RFC3986_H
1818
#define PHP_URI_PARSER_RFC3986_H
1919

20-
#include <uriparser/Uri.h>
2120
#include "php_uri_common.h"
2221

2322
extern const php_uri_parser php_uri_parser_rfc3986;
2423

25-
typedef struct php_uri_parser_rfc3986_uris {
26-
UriUriA uri;
27-
UriUriA normalized_uri;
28-
bool normalized_uri_initialized;
29-
} php_uri_parser_rfc3986_uris;
24+
typedef struct php_uri_parser_rfc3986_uris php_uri_parser_rfc3986_uris;
3025

3126
zend_result php_uri_parser_rfc3986_userinfo_read(void *uri, php_uri_component_read_mode read_mode, zval *retval);
3227
zend_result php_uri_parser_rfc3986_userinfo_write(void *uri, zval *value, zval *errors);

0 commit comments

Comments
 (0)