@@ -956,14 +956,29 @@ PHP_METHOD(Uri_WhatWg_Url, __debugInfo)
956956 RETURN_ARR (uri_get_debug_properties (object ));
957957}
958958
959- static zend_object * uri_create_object_handler (zend_class_entry * class_type )
959+ static uri_object_t * uri_create_object_handler (zend_class_entry * class_type , const uri_parser_t * parser )
960960{
961961 uri_object_t * uri_object = zend_object_alloc (sizeof (* uri_object ), class_type );
962962
963963 zend_object_std_init (& uri_object -> std , class_type );
964964 object_properties_init (& uri_object -> std , class_type );
965965
966- return & uri_object -> std ;
966+ uri_object -> internal = (uri_internal_t ){
967+ .parser = parser ,
968+ .uri = NULL ,
969+ };
970+
971+ return uri_object ;
972+ }
973+
974+ static zend_object * uri_create_object_handler_rfc3986 (zend_class_entry * ce )
975+ {
976+ return & uri_create_object_handler (ce , & php_uri_parser_rfc3986 )-> std ;
977+ }
978+
979+ static zend_object * uri_create_object_handler_whatwg (zend_class_entry * ce )
980+ {
981+ return & uri_create_object_handler (ce , & php_uri_parser_whatwg )-> std ;
967982}
968983
969984static void uri_free_obj_handler (zend_object * object )
@@ -986,11 +1001,8 @@ zend_object *uri_clone_obj_handler(zend_object *object)
9861001
9871002 URI_ASSERT_INITIALIZATION (internal_uri );
9881003
989- zend_object * new_object = uri_create_object_handler (object -> ce );
990- ZEND_ASSERT (new_object != NULL );
991- uri_object_t * new_uri_object = uri_object_from_obj (new_object );
992-
993- new_uri_object -> internal .parser = internal_uri -> parser ;
1004+ uri_object_t * new_uri_object = uri_object_from_obj (object -> ce -> create_object (object -> ce ));
1005+ ZEND_ASSERT (new_uri_object -> internal .parser == internal_uri -> parser );
9941006
9951007 void * uri = internal_uri -> parser -> clone_uri (internal_uri -> uri );
9961008 ZEND_ASSERT (uri != NULL );
@@ -1022,15 +1034,15 @@ PHPAPI zend_result php_uri_parser_register(const uri_parser_t *uri_parser)
10221034static PHP_MINIT_FUNCTION (uri )
10231035{
10241036 uri_rfc3986_uri_ce = register_class_Uri_Rfc3986_Uri ();
1025- uri_rfc3986_uri_ce -> create_object = uri_create_object_handler ;
1037+ uri_rfc3986_uri_ce -> create_object = uri_create_object_handler_rfc3986 ;
10261038 uri_rfc3986_uri_ce -> default_object_handlers = & uri_rfc3986_uri_object_handlers ;
10271039 memcpy (& uri_rfc3986_uri_object_handlers , zend_get_std_object_handlers (), sizeof (zend_object_handlers ));
10281040 uri_rfc3986_uri_object_handlers .offset = XtOffsetOf (uri_object_t , std );
10291041 uri_rfc3986_uri_object_handlers .free_obj = uri_free_obj_handler ;
10301042 uri_rfc3986_uri_object_handlers .clone_obj = uri_clone_obj_handler ;
10311043
10321044 uri_whatwg_url_ce = register_class_Uri_WhatWg_Url ();
1033- uri_whatwg_url_ce -> create_object = uri_create_object_handler ;
1045+ uri_whatwg_url_ce -> create_object = uri_create_object_handler_whatwg ;
10341046 uri_whatwg_url_ce -> default_object_handlers = & uri_whatwg_uri_object_handlers ;
10351047 memcpy (& uri_whatwg_uri_object_handlers , zend_get_std_object_handlers (), sizeof (zend_object_handlers ));
10361048 uri_whatwg_uri_object_handlers .offset = XtOffsetOf (uri_object_t , std );
0 commit comments