Skip to content

Commit 0eea3ac

Browse files
committed
Fix property handling
1 parent 1dabc44 commit 0eea3ac

1 file changed

Lines changed: 23 additions & 13 deletions

File tree

ext/uri/php_uri.c

Lines changed: 23 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -57,13 +57,22 @@ static const zend_module_dep uri_deps[] = {
5757

5858
static zend_array uri_parsers;
5959

60-
#define Z_RFC3986_URI_PROP_SCHEME_P(zv) OBJ_PROP_NUM(Z_OBJ_P(zv), 0)
61-
#define Z_RFC3986_URI_PROP_USERINFO_P(zv) OBJ_PROP_NUM(Z_OBJ_P(zv), 1)
62-
#define Z_RFC3986_URI_PROP_HOST_P(zv) OBJ_PROP_NUM(Z_OBJ_P(zv), 2)
63-
#define Z_RFC3986_URI_PROP_PORT_P(zv) OBJ_PROP_NUM(Z_OBJ_P(zv), 3)
64-
#define Z_RFC3986_URI_PROP_PATH_P(zv) OBJ_PROP_NUM(Z_OBJ_P(zv), 4)
65-
#define Z_RFC3986_URI_PROP_QUERY_P(zv) OBJ_PROP_NUM(Z_OBJ_P(zv), 5)
66-
#define Z_RFC3986_URI_PROP_FRAGMENT_P(zv) OBJ_PROP_NUM(Z_OBJ_P(zv), 6)
60+
static zend_always_inline zval *php_uri_deref(zval *zv)
61+
{
62+
if (UNEXPECTED(Z_TYPE_P(zv) == IS_REFERENCE)) {
63+
return Z_REFVAL_P(zv);
64+
}
65+
66+
return zv;
67+
}
68+
69+
#define Z_RFC3986_URI_PROP_SCHEME_P(zv) php_uri_deref(OBJ_PROP_NUM(Z_OBJ_P(zv), 0))
70+
#define Z_RFC3986_URI_PROP_USERINFO_P(zv) php_uri_deref(OBJ_PROP_NUM(Z_OBJ_P(zv), 1))
71+
#define Z_RFC3986_URI_PROP_HOST_P(zv) php_uri_deref(OBJ_PROP_NUM(Z_OBJ_P(zv), 2))
72+
#define Z_RFC3986_URI_PROP_PORT_P(zv) php_uri_deref(OBJ_PROP_NUM(Z_OBJ_P(zv), 3))
73+
#define Z_RFC3986_URI_PROP_PATH_P(zv) php_uri_deref(OBJ_PROP_NUM(Z_OBJ_P(zv), 4))
74+
#define Z_RFC3986_URI_PROP_QUERY_P(zv) php_uri_deref(OBJ_PROP_NUM(Z_OBJ_P(zv), 5))
75+
#define Z_RFC3986_URI_PROP_FRAGMENT_P(zv) php_uri_deref(OBJ_PROP_NUM(Z_OBJ_P(zv), 6))
6776

6877
static HashTable *uri_get_debug_properties(php_uri_object *object)
6978
{
@@ -1060,13 +1069,14 @@ PHP_METHOD(Uri_Rfc3986_UriBuilder, reset)
10601069
{
10611070
ZEND_PARSE_PARAMETERS_NONE();
10621071

1063-
ZVAL_NULL(Z_RFC3986_URI_PROP_SCHEME_P(ZEND_THIS));
1064-
ZVAL_NULL(Z_RFC3986_URI_PROP_USERINFO_P(ZEND_THIS));
1065-
ZVAL_NULL(Z_RFC3986_URI_PROP_HOST_P(ZEND_THIS));
1066-
ZVAL_NULL(Z_RFC3986_URI_PROP_PORT_P(ZEND_THIS));
1072+
convert_to_null(Z_RFC3986_URI_PROP_SCHEME_P(ZEND_THIS));
1073+
convert_to_null(Z_RFC3986_URI_PROP_USERINFO_P(ZEND_THIS));
1074+
convert_to_null(Z_RFC3986_URI_PROP_HOST_P(ZEND_THIS));
1075+
convert_to_null(Z_RFC3986_URI_PROP_PORT_P(ZEND_THIS));
1076+
zval_ptr_dtor(Z_RFC3986_URI_PROP_PATH_P(ZEND_THIS));
10671077
ZVAL_EMPTY_STRING(Z_RFC3986_URI_PROP_PATH_P(ZEND_THIS));
1068-
ZVAL_NULL(Z_RFC3986_URI_PROP_QUERY_P(ZEND_THIS));
1069-
ZVAL_NULL(Z_RFC3986_URI_PROP_FRAGMENT_P(ZEND_THIS));
1078+
convert_to_null(Z_RFC3986_URI_PROP_QUERY_P(ZEND_THIS));
1079+
convert_to_null(Z_RFC3986_URI_PROP_FRAGMENT_P(ZEND_THIS));
10701080

10711081
RETVAL_COPY(ZEND_THIS);
10721082
}

0 commit comments

Comments
 (0)