@@ -53,14 +53,11 @@ static zend_array uri_parsers;
5353
5454static HashTable * uri_get_debug_properties (uri_object_t * object )
5555{
56- uri_internal_t * internal_uri = & object -> internal ;
57- ZEND_ASSERT (internal_uri != NULL );
58-
5956 const HashTable * std_properties = zend_std_get_properties (& object -> std );
6057 HashTable * result = zend_array_dup (std_properties );
6158
62- const php_uri_parser * const parser = internal_uri -> parser ;
63- void * const uri = internal_uri -> uri ;
59+ const php_uri_parser * const parser = object -> parser ;
60+ void * const uri = object -> uri ;
6461
6562 if (UNEXPECTED (uri == NULL )) {
6663 return result ;
@@ -324,7 +321,7 @@ ZEND_ATTRIBUTE_NONNULL_ARGS(1, 2) PHPAPI void php_uri_instantiate_uri(
324321 uri_object_t * uri_object ;
325322 if (should_update_this_object ) {
326323 uri_object = Z_URI_OBJECT_P (ZEND_THIS );
327- if (uri_object -> internal . uri != NULL ) {
324+ if (uri_object -> uri != NULL ) {
328325 zend_throw_error (NULL , "Cannot modify readonly object of class %s" , ZSTR_VAL (Z_OBJCE_P (ZEND_THIS )-> name ));
329326 RETURN_THROWS ();
330327 }
@@ -337,18 +334,17 @@ ZEND_ATTRIBUTE_NONNULL_ARGS(1, 2) PHPAPI void php_uri_instantiate_uri(
337334 uri_object = Z_URI_OBJECT_P (return_value );
338335 }
339336
340- const php_uri_parser * uri_parser = uri_object -> internal . parser ;
337+ const php_uri_parser * uri_parser = uri_object -> parser ;
341338
342339 zval errors ;
343340 ZVAL_UNDEF (& errors );
344341
345342 void * base_url = NULL ;
346343 if (base_url_object != NULL ) {
347344 ZEND_ASSERT (base_url_object -> std .ce == uri_object -> std .ce );
348- const uri_internal_t * internal_base_url = & base_url_object -> internal ;
349- URI_ASSERT_INITIALIZATION (internal_base_url );
350- ZEND_ASSERT (internal_base_url -> parser == uri_parser );
351- base_url = internal_base_url -> uri ;
345+ ZEND_ASSERT (base_url_object -> uri != NULL );
346+ ZEND_ASSERT (base_url_object -> parser == uri_parser );
347+ base_url = base_url_object -> uri ;
352348 }
353349
354350 void * uri = uri_parser -> parse (ZSTR_VAL (uri_str ), ZSTR_LEN (uri_str ), base_url , errors_zv != NULL ? & errors : NULL , !should_throw );
@@ -370,7 +366,7 @@ ZEND_ATTRIBUTE_NONNULL_ARGS(1, 2) PHPAPI void php_uri_instantiate_uri(
370366 RETURN_THROWS ();
371367 }
372368
373- uri_object -> internal . uri = uri ;
369+ uri_object -> uri = uri ;
374370}
375371
376372static void create_rfc3986_uri (INTERNAL_FUNCTION_PARAMETERS , bool is_constructor )
@@ -531,10 +527,10 @@ static void rfc3986_userinfo_read(INTERNAL_FUNCTION_PARAMETERS, php_uri_componen
531527{
532528 ZEND_PARSE_PARAMETERS_NONE ();
533529
534- uri_internal_t * internal_uri = Z_URI_INTERNAL_P (ZEND_THIS );
535- URI_ASSERT_INITIALIZATION ( internal_uri );
530+ uri_object_t * uri_object = Z_URI_OBJECT_P (ZEND_THIS );
531+ ZEND_ASSERT ( uri_object -> uri != NULL );
536532
537- if (UNEXPECTED (php_uri_parser_rfc3986_userinfo_read (internal_uri -> uri , read_mode , return_value ) == FAILURE )) {
533+ if (UNEXPECTED (php_uri_parser_rfc3986_userinfo_read (uri_object -> uri , read_mode , return_value ) == FAILURE )) {
538534 zend_throw_error (NULL , "The userinfo component cannot be retrieved" );
539535 RETURN_THROWS ();
540536 }
@@ -565,11 +561,10 @@ PHP_METHOD(Uri_Rfc3986_Uri, withUserInfo)
565561 ZVAL_STR (& zv , value );
566562 }
567563
568- zend_object * old_object = Z_OBJ_P (ZEND_THIS );
569- uri_internal_t * internal_uri = Z_URI_INTERNAL_P (ZEND_THIS );
570- URI_ASSERT_INITIALIZATION (internal_uri );
564+ uri_object_t * old_uri_object = uri_object_from_obj (Z_OBJ_P (ZEND_THIS ));
565+ ZEND_ASSERT (old_uri_object -> uri != NULL );
571566
572- zend_object * new_object = old_object -> handlers -> clone_obj (old_object );
567+ zend_object * new_object = old_uri_object -> std . handlers -> clone_obj (& old_uri_object -> std );
573568 if (new_object == NULL ) {
574569 RETURN_THROWS ();
575570 }
@@ -578,10 +573,10 @@ PHP_METHOD(Uri_Rfc3986_Uri, withUserInfo)
578573 * case of an exception being thrown. */
579574 RETVAL_OBJ (new_object );
580575
581- uri_internal_t * new_internal_uri = uri_internal_from_obj (new_object );
582- URI_ASSERT_INITIALIZATION ( new_internal_uri );
576+ uri_object_t * new_uri_object = uri_object_from_obj (new_object );
577+ ZEND_ASSERT ( new_uri_object -> uri != NULL );
583578
584- if (UNEXPECTED (php_uri_parser_rfc3986_userinfo_write (new_internal_uri -> uri , & zv , NULL ) == FAILURE )) {
579+ if (UNEXPECTED (php_uri_parser_rfc3986_userinfo_write (new_uri_object -> uri , & zv , NULL ) == FAILURE )) {
585580 RETURN_THROWS ();
586581 }
587582}
@@ -684,11 +679,8 @@ static void throw_cannot_recompose_uri_to_string(uri_object_t *object)
684679static void uri_equals (INTERNAL_FUNCTION_PARAMETERS , uri_object_t * that_object , zend_object * comparison_mode )
685680{
686681 uri_object_t * this_object = Z_URI_OBJECT_P (ZEND_THIS );
687- uri_internal_t * this_internal_uri = & this_object -> internal ;
688- URI_ASSERT_INITIALIZATION (this_internal_uri );
689-
690- uri_internal_t * that_internal_uri = & that_object -> internal ;
691- URI_ASSERT_INITIALIZATION (that_internal_uri );
682+ ZEND_ASSERT (this_object -> uri != NULL );
683+ ZEND_ASSERT (that_object -> uri != NULL );
692684
693685 if (this_object -> std .ce != that_object -> std .ce &&
694686 !instanceof_function (this_object -> std .ce , that_object -> std .ce ) &&
@@ -703,15 +695,15 @@ static void uri_equals(INTERNAL_FUNCTION_PARAMETERS, uri_object_t *that_object,
703695 exclude_fragment = zend_string_equals_literal (Z_STR_P (case_name ), "ExcludeFragment" );
704696 }
705697
706- zend_string * this_str = this_internal_uri -> parser -> to_string (
707- this_internal_uri -> uri , PHP_URI_RECOMPOSITION_MODE_NORMALIZED_ASCII , exclude_fragment );
698+ zend_string * this_str = this_object -> parser -> to_string (
699+ this_object -> uri , PHP_URI_RECOMPOSITION_MODE_NORMALIZED_ASCII , exclude_fragment );
708700 if (this_str == NULL ) {
709701 throw_cannot_recompose_uri_to_string (this_object );
710702 RETURN_THROWS ();
711703 }
712704
713- zend_string * that_str = that_internal_uri -> parser -> to_string (
714- that_internal_uri -> uri , PHP_URI_RECOMPOSITION_MODE_NORMALIZED_ASCII , exclude_fragment );
705+ zend_string * that_str = that_object -> parser -> to_string (
706+ that_object -> uri , PHP_URI_RECOMPOSITION_MODE_NORMALIZED_ASCII , exclude_fragment );
715707 if (that_str == NULL ) {
716708 zend_string_release (this_str );
717709 throw_cannot_recompose_uri_to_string (that_object );
@@ -742,13 +734,12 @@ PHP_METHOD(Uri_Rfc3986_Uri, toRawString)
742734{
743735 ZEND_PARSE_PARAMETERS_NONE ();
744736
745- uri_object_t * this_object = Z_URI_OBJECT_P (ZEND_THIS );
746- uri_internal_t * internal_uri = & this_object -> internal ;
747- URI_ASSERT_INITIALIZATION (internal_uri );
737+ uri_object_t * uri_object = Z_URI_OBJECT_P (ZEND_THIS );
738+ ZEND_ASSERT (uri_object -> uri != NULL );
748739
749- zend_string * uri_str = internal_uri -> parser -> to_string (internal_uri -> uri , PHP_URI_RECOMPOSITION_MODE_RAW_ASCII , false);
740+ zend_string * uri_str = uri_object -> parser -> to_string (uri_object -> uri , PHP_URI_RECOMPOSITION_MODE_RAW_ASCII , false);
750741 if (uri_str == NULL ) {
751- throw_cannot_recompose_uri_to_string (this_object );
742+ throw_cannot_recompose_uri_to_string (uri_object );
752743 RETURN_THROWS ();
753744 }
754745
@@ -759,13 +750,12 @@ PHP_METHOD(Uri_Rfc3986_Uri, toString)
759750{
760751 ZEND_PARSE_PARAMETERS_NONE ();
761752
762- uri_object_t * this_object = Z_URI_OBJECT_P (ZEND_THIS );
763- uri_internal_t * internal_uri = & this_object -> internal ;
764- URI_ASSERT_INITIALIZATION (internal_uri );
753+ uri_object_t * uri_object = Z_URI_OBJECT_P (ZEND_THIS );
754+ ZEND_ASSERT (uri_object -> uri != NULL );
765755
766- zend_string * uri_str = internal_uri -> parser -> to_string (internal_uri -> uri , PHP_URI_RECOMPOSITION_MODE_NORMALIZED_ASCII , false);
756+ zend_string * uri_str = uri_object -> parser -> to_string (uri_object -> uri , PHP_URI_RECOMPOSITION_MODE_NORMALIZED_ASCII , false);
767757 if (uri_str == NULL ) {
768- throw_cannot_recompose_uri_to_string (this_object );
758+ throw_cannot_recompose_uri_to_string (uri_object );
769759 RETURN_THROWS ();
770760 }
771761
@@ -788,14 +778,13 @@ PHP_METHOD(Uri_Rfc3986_Uri, __serialize)
788778{
789779 ZEND_PARSE_PARAMETERS_NONE ();
790780
791- uri_object_t * this_object = Z_URI_OBJECT_P (ZEND_THIS );
792- uri_internal_t * internal_uri = & this_object -> internal ;
793- URI_ASSERT_INITIALIZATION (internal_uri );
781+ uri_object_t * uri_object = Z_URI_OBJECT_P (ZEND_THIS );
782+ ZEND_ASSERT (uri_object -> uri != NULL );
794783
795784 /* Serialize state: "uri" key in the first array */
796- zend_string * uri_str = internal_uri -> parser -> to_string (internal_uri -> uri , PHP_URI_RECOMPOSITION_MODE_RAW_ASCII , false);
785+ zend_string * uri_str = uri_object -> parser -> to_string (uri_object -> uri , PHP_URI_RECOMPOSITION_MODE_RAW_ASCII , false);
797786 if (uri_str == NULL ) {
798- throw_cannot_recompose_uri_to_string (this_object );
787+ throw_cannot_recompose_uri_to_string (uri_object );
799788 RETURN_THROWS ();
800789 }
801790 zval tmp ;
@@ -809,7 +798,7 @@ PHP_METHOD(Uri_Rfc3986_Uri, __serialize)
809798 zend_hash_next_index_insert (Z_ARRVAL_P (return_value ), & arr );
810799
811800 /* Serialize regular properties: second array */
812- ZVAL_ARR (& arr , this_object -> std .handlers -> get_properties (& this_object -> std ));
801+ ZVAL_ARR (& arr , uri_object -> std .handlers -> get_properties (& uri_object -> std ));
813802 Z_TRY_ADDREF (arr );
814803 zend_hash_next_index_insert (Z_ARRVAL_P (return_value ), & arr );
815804}
@@ -822,56 +811,55 @@ static void uri_unserialize(INTERNAL_FUNCTION_PARAMETERS)
822811 Z_PARAM_ARRAY_HT (data )
823812 ZEND_PARSE_PARAMETERS_END ();
824813
825- zend_object * object = Z_OBJ_P (ZEND_THIS );
826- uri_internal_t * internal_uri = uri_internal_from_obj (object );
827- if (internal_uri -> uri != NULL ) {
814+ uri_object_t * uri_object = uri_object_from_obj (Z_OBJ_P (ZEND_THIS ));
815+ if (uri_object -> uri != NULL ) {
828816 /* Intentionally throw two exceptions for proper chaining. */
829- zend_throw_error (NULL , "Cannot modify readonly object of class %s" , ZSTR_VAL (object -> ce -> name ));
830- zend_throw_exception_ex (NULL , 0 , "Invalid serialization data for %s object" , ZSTR_VAL (object -> ce -> name ));
817+ zend_throw_error (NULL , "Cannot modify readonly object of class %s" , ZSTR_VAL (uri_object -> std . ce -> name ));
818+ zend_throw_exception_ex (NULL , 0 , "Invalid serialization data for %s object" , ZSTR_VAL (uri_object -> std . ce -> name ));
831819 RETURN_THROWS ();
832820 }
833821
834822 /* Verify the expected number of elements, this implicitly ensures that no additional elements are present. */
835823 if (zend_hash_num_elements (data ) != 2 ) {
836- zend_throw_exception_ex (NULL , 0 , "Invalid serialization data for %s object" , ZSTR_VAL (object -> ce -> name ));
824+ zend_throw_exception_ex (NULL , 0 , "Invalid serialization data for %s object" , ZSTR_VAL (uri_object -> std . ce -> name ));
837825 RETURN_THROWS ();
838826 }
839827
840828 /* Unserialize state: "uri" key in the first array */
841829 zval * arr = zend_hash_index_find (data , 0 );
842830 if (arr == NULL || Z_TYPE_P (arr ) != IS_ARRAY ) {
843- zend_throw_exception_ex (NULL , 0 , "Invalid serialization data for %s object" , ZSTR_VAL (object -> ce -> name ));
831+ zend_throw_exception_ex (NULL , 0 , "Invalid serialization data for %s object" , ZSTR_VAL (uri_object -> std . ce -> name ));
844832 RETURN_THROWS ();
845833 }
846834
847835 /* Verify the expected number of elements inside the first array, this implicitly ensures that no additional elements are present. */
848836 if (zend_hash_num_elements (Z_ARRVAL_P (arr )) != 1 ) {
849- zend_throw_exception_ex (NULL , 0 , "Invalid serialization data for %s object" , ZSTR_VAL (object -> ce -> name ));
837+ zend_throw_exception_ex (NULL , 0 , "Invalid serialization data for %s object" , ZSTR_VAL (uri_object -> std . ce -> name ));
850838 RETURN_THROWS ();
851839 }
852840
853841 zval * uri_zv = zend_hash_str_find_ind (Z_ARRVAL_P (arr ), ZEND_STRL (URI_SERIALIZED_PROPERTY_NAME ));
854842 if (uri_zv == NULL || Z_TYPE_P (uri_zv ) != IS_STRING ) {
855- zend_throw_exception_ex (NULL , 0 , "Invalid serialization data for %s object" , ZSTR_VAL (object -> ce -> name ));
843+ zend_throw_exception_ex (NULL , 0 , "Invalid serialization data for %s object" , ZSTR_VAL (uri_object -> std . ce -> name ));
856844 RETURN_THROWS ();
857845 }
858846
859- internal_uri -> uri = internal_uri -> parser -> parse (Z_STRVAL_P (uri_zv ), Z_STRLEN_P (uri_zv ), NULL , NULL , true);
860- if (internal_uri -> uri == NULL ) {
861- zend_throw_exception_ex (NULL , 0 , "Invalid serialization data for %s object" , ZSTR_VAL (object -> ce -> name ));
847+ uri_object -> uri = uri_object -> parser -> parse (Z_STRVAL_P (uri_zv ), Z_STRLEN_P (uri_zv ), NULL , NULL , true);
848+ if (uri_object -> uri == NULL ) {
849+ zend_throw_exception_ex (NULL , 0 , "Invalid serialization data for %s object" , ZSTR_VAL (uri_object -> std . ce -> name ));
862850 RETURN_THROWS ();
863851 }
864852
865853 /* Unserialize regular properties: second array */
866854 arr = zend_hash_index_find (data , 1 );
867855 if (arr == NULL || Z_TYPE_P (arr ) != IS_ARRAY ) {
868- zend_throw_exception_ex (NULL , 0 , "Invalid serialization data for %s object" , ZSTR_VAL (object -> ce -> name ));
856+ zend_throw_exception_ex (NULL , 0 , "Invalid serialization data for %s object" , ZSTR_VAL (uri_object -> std . ce -> name ));
869857 RETURN_THROWS ();
870858 }
871859
872860 /* Verify that there is no regular property in the second array, because the URI classes have no properties and they are final. */
873861 if (zend_hash_num_elements (Z_ARRVAL_P (arr )) > 0 ) {
874- zend_throw_exception_ex (NULL , 0 , "Invalid serialization data for %s object" , ZSTR_VAL (object -> ce -> name ));
862+ zend_throw_exception_ex (NULL , 0 , "Invalid serialization data for %s object" , ZSTR_VAL (uri_object -> std . ce -> name ));
875863 RETURN_THROWS ();
876864 }
877865}
@@ -944,21 +932,21 @@ PHP_METHOD(Uri_WhatWg_Url, toUnicodeString)
944932 ZEND_PARSE_PARAMETERS_NONE ();
945933
946934 zend_object * this_object = Z_OBJ_P (ZEND_THIS );
947- uri_internal_t * internal_uri = uri_internal_from_obj (this_object );
948- URI_ASSERT_INITIALIZATION ( internal_uri );
935+ uri_object_t * uri_object = uri_object_from_obj (this_object );
936+ ZEND_ASSERT ( uri_object -> uri != NULL );
949937
950- RETURN_STR (internal_uri -> parser -> to_string (internal_uri -> uri , PHP_URI_RECOMPOSITION_MODE_RAW_UNICODE , false));
938+ RETURN_STR (uri_object -> parser -> to_string (uri_object -> uri , PHP_URI_RECOMPOSITION_MODE_RAW_UNICODE , false));
951939}
952940
953941PHP_METHOD (Uri_WhatWg_Url , toAsciiString )
954942{
955943 ZEND_PARSE_PARAMETERS_NONE ();
956944
957945 zend_object * this_object = Z_OBJ_P (ZEND_THIS );
958- uri_internal_t * internal_uri = uri_internal_from_obj (this_object );
959- URI_ASSERT_INITIALIZATION ( internal_uri );
946+ uri_object_t * uri_object = uri_object_from_obj (this_object );
947+ ZEND_ASSERT ( uri_object -> uri != NULL );
960948
961- RETURN_STR (internal_uri -> parser -> to_string (internal_uri -> uri , PHP_URI_RECOMPOSITION_MODE_RAW_ASCII , false));
949+ RETURN_STR (uri_object -> parser -> to_string (uri_object -> uri , PHP_URI_RECOMPOSITION_MODE_RAW_ASCII , false));
962950}
963951
964952PHP_METHOD (Uri_WhatWg_Url , resolve )
@@ -981,11 +969,10 @@ PHP_METHOD(Uri_WhatWg_Url, __serialize)
981969 ZEND_PARSE_PARAMETERS_NONE ();
982970
983971 uri_object_t * this_object = Z_URI_OBJECT_P (ZEND_THIS );
984- uri_internal_t * internal_uri = & this_object -> internal ;
985- URI_ASSERT_INITIALIZATION (internal_uri );
972+ ZEND_ASSERT (this_object -> uri != NULL );
986973
987974 /* Serialize state: "uri" key in the first array */
988- zend_string * uri_str = internal_uri -> parser -> to_string (internal_uri -> uri , PHP_URI_RECOMPOSITION_MODE_RAW_ASCII , false);
975+ zend_string * uri_str = this_object -> parser -> to_string (this_object -> uri , PHP_URI_RECOMPOSITION_MODE_RAW_ASCII , false);
989976 if (uri_str == NULL ) {
990977 throw_cannot_recompose_uri_to_string (this_object );
991978 RETURN_THROWS ();
@@ -1027,10 +1014,8 @@ PHPAPI uri_object_t *php_uri_object_create(zend_class_entry *class_type, const p
10271014 zend_object_std_init (& uri_object -> std , class_type );
10281015 object_properties_init (& uri_object -> std , class_type );
10291016
1030- uri_object -> internal = (uri_internal_t ){
1031- .parser = parser ,
1032- .uri = NULL ,
1033- };
1017+ uri_object -> parser = parser ;
1018+ uri_object -> uri = NULL ;
10341019
10351020 return uri_object ;
10361021}
@@ -1049,24 +1034,23 @@ PHPAPI void php_uri_object_handler_free(zend_object *object)
10491034{
10501035 uri_object_t * uri_object = uri_object_from_obj (object );
10511036
1052- uri_object -> internal . parser -> destroy (uri_object -> internal . uri );
1037+ uri_object -> parser -> destroy (uri_object -> uri );
10531038 zend_object_std_dtor (& uri_object -> std );
10541039}
10551040
10561041PHPAPI zend_object * php_uri_object_handler_clone (zend_object * object )
10571042{
10581043 uri_object_t * uri_object = uri_object_from_obj (object );
1059- uri_internal_t * internal_uri = uri_internal_from_obj (object );
10601044
1061- URI_ASSERT_INITIALIZATION ( internal_uri );
1045+ ZEND_ASSERT ( uri_object -> uri != NULL );
10621046
10631047 uri_object_t * new_uri_object = uri_object_from_obj (object -> ce -> create_object (object -> ce ));
1064- ZEND_ASSERT (new_uri_object -> internal . parser == internal_uri -> parser );
1048+ ZEND_ASSERT (new_uri_object -> parser == uri_object -> parser );
10651049
1066- void * uri = internal_uri -> parser -> clone (internal_uri -> uri );
1050+ void * uri = uri_object -> parser -> clone (uri_object -> uri );
10671051 ZEND_ASSERT (uri != NULL );
10681052
1069- new_uri_object -> internal . uri = uri ;
1053+ new_uri_object -> uri = uri ;
10701054
10711055 zend_objects_clone_members (& new_uri_object -> std , & uri_object -> std );
10721056
0 commit comments