@@ -954,14 +954,29 @@ PHP_METHOD(Uri_WhatWg_Url, __debugInfo)
954954 RETURN_ARR (uri_get_debug_properties (object ));
955955}
956956
957- static zend_object * uri_create_object_handler (zend_class_entry * class_type )
957+ static uri_object_t * uri_create_object_handler (zend_class_entry * class_type , const uri_parser_t * parser )
958958{
959959 uri_object_t * uri_object = zend_object_alloc (sizeof (* uri_object ), class_type );
960960
961961 zend_object_std_init (& uri_object -> std , class_type );
962962 object_properties_init (& uri_object -> std , class_type );
963963
964- return & uri_object -> std ;
964+ uri_object -> internal = (uri_internal_t ){
965+ .parser = parser ,
966+ .uri = NULL ,
967+ };
968+
969+ return uri_object ;
970+ }
971+
972+ static zend_object * uri_create_object_handler_rfc3986 (zend_class_entry * ce )
973+ {
974+ return & uri_create_object_handler (ce , & php_uri_parser_rfc3986 )-> std ;
975+ }
976+
977+ static zend_object * uri_create_object_handler_whatwg (zend_class_entry * ce )
978+ {
979+ return & uri_create_object_handler (ce , & php_uri_parser_whatwg )-> std ;
965980}
966981
967982static void uri_free_obj_handler (zend_object * object )
@@ -984,11 +999,8 @@ static zend_object *uri_clone_obj_handler(zend_object *object)
984999
9851000 URI_ASSERT_INITIALIZATION (internal_uri );
9861001
987- zend_object * new_object = uri_create_object_handler (object -> ce );
988- ZEND_ASSERT (new_object != NULL );
989- uri_object_t * new_uri_object = uri_object_from_obj (new_object );
990-
991- new_uri_object -> internal .parser = internal_uri -> parser ;
1002+ uri_object_t * new_uri_object = uri_object_from_obj (object -> ce -> create_object (object -> ce ));
1003+ ZEND_ASSERT (new_uri_object -> internal .parser == internal_uri -> parser );
9921004
9931005 void * uri = internal_uri -> parser -> clone_uri (internal_uri -> uri );
9941006 ZEND_ASSERT (uri != NULL );
@@ -1020,15 +1032,15 @@ PHPAPI zend_result php_uri_parser_register(const uri_parser_t *uri_parser)
10201032static PHP_MINIT_FUNCTION (uri )
10211033{
10221034 uri_rfc3986_uri_ce = register_class_Uri_Rfc3986_Uri ();
1023- uri_rfc3986_uri_ce -> create_object = uri_create_object_handler ;
1035+ uri_rfc3986_uri_ce -> create_object = uri_create_object_handler_rfc3986 ;
10241036 uri_rfc3986_uri_ce -> default_object_handlers = & uri_rfc3986_uri_object_handlers ;
10251037 memcpy (& uri_rfc3986_uri_object_handlers , zend_get_std_object_handlers (), sizeof (zend_object_handlers ));
10261038 uri_rfc3986_uri_object_handlers .offset = XtOffsetOf (uri_object_t , std );
10271039 uri_rfc3986_uri_object_handlers .free_obj = uri_free_obj_handler ;
10281040 uri_rfc3986_uri_object_handlers .clone_obj = uri_clone_obj_handler ;
10291041
10301042 uri_whatwg_url_ce = register_class_Uri_WhatWg_Url ();
1031- uri_whatwg_url_ce -> create_object = uri_create_object_handler ;
1043+ uri_whatwg_url_ce -> create_object = uri_create_object_handler_whatwg ;
10321044 uri_whatwg_url_ce -> default_object_handlers = & uri_whatwg_uri_object_handlers ;
10331045 memcpy (& uri_whatwg_uri_object_handlers , zend_get_std_object_handlers (), sizeof (zend_object_handlers ));
10341046 uri_whatwg_uri_object_handlers .offset = XtOffsetOf (uri_object_t , std );
0 commit comments