@@ -746,6 +746,11 @@ static ZEND_FUNCTION(zend_test_uri_parser)
746746 RETURN_THROWS ();
747747 }
748748
749+ php_uri * uri_struct = php_uri_parse_to_struct (parser , ZSTR_VAL (uri_string ), ZSTR_LEN (uri_string ), PHP_URI_COMPONENT_READ_MODE_RAW , false);
750+ if (uri_struct == NULL ) {
751+ RETURN_THROWS ();
752+ }
753+
749754 zval value ;
750755
751756 array_init (return_value );
@@ -787,7 +792,56 @@ static ZEND_FUNCTION(zend_test_uri_parser)
787792 php_uri_get_fragment (uri , PHP_URI_COMPONENT_READ_MODE_RAW , & value );
788793 zend_hash_add (Z_ARR (raw ), ZSTR_KNOWN (ZEND_STR_FRAGMENT ), & value );
789794 zend_hash_str_add (Z_ARR_P (return_value ), "raw" , strlen ("raw" ), & raw );
795+ zval from_struct ;
796+ zval dummy ;
797+ array_init (& from_struct );
798+ if (uri_struct -> scheme ) {
799+ ZVAL_STR_COPY (& dummy , uri_struct -> scheme );
800+ } else {
801+ ZVAL_NULL (& dummy );
802+ }
803+ zend_hash_add (Z_ARR (from_struct ), ZSTR_KNOWN (ZEND_STR_SCHEME ), & dummy );
804+ if (uri_struct -> user ) {
805+ ZVAL_STR_COPY (& dummy , uri_struct -> user );
806+ } else {
807+ ZVAL_NULL (& dummy );
808+ }
809+ zend_hash_add (Z_ARR (from_struct ), ZSTR_KNOWN (ZEND_STR_USERNAME ), & dummy );
810+ if (uri_struct -> password ) {
811+ ZVAL_STR_COPY (& dummy , uri_struct -> password );
812+ } else {
813+ ZVAL_NULL (& dummy );
814+ }
815+ zend_hash_add (Z_ARR (from_struct ), ZSTR_KNOWN (ZEND_STR_PASSWORD ), & dummy );
816+ if (uri_struct -> host ) {
817+ ZVAL_STR_COPY (& dummy , uri_struct -> host );
818+ } else {
819+ ZVAL_NULL (& dummy );
820+ }
821+ zend_hash_add (Z_ARR (from_struct ), ZSTR_KNOWN (ZEND_STR_HOST ), & dummy );
822+ ZVAL_LONG (& dummy , uri_struct -> port );
823+ zend_hash_add (Z_ARR (from_struct ), ZSTR_KNOWN (ZEND_STR_PORT ), & dummy );
824+ if (uri_struct -> path ) {
825+ ZVAL_STR_COPY (& dummy , uri_struct -> path );
826+ } else {
827+ ZVAL_NULL (& dummy );
828+ }
829+ zend_hash_add (Z_ARR (from_struct ), ZSTR_KNOWN (ZEND_STR_PATH ), & dummy );
830+ if (uri_struct -> query ) {
831+ ZVAL_STR_COPY (& dummy , uri_struct -> query );
832+ } else {
833+ ZVAL_NULL (& dummy );
834+ }
835+ zend_hash_add (Z_ARR (from_struct ), ZSTR_KNOWN (ZEND_STR_QUERY ), & dummy );
836+ if (uri_struct -> fragment ) {
837+ ZVAL_STR_COPY (& dummy , uri_struct -> fragment );
838+ } else {
839+ ZVAL_NULL (& dummy );
840+ }
841+ zend_hash_add (Z_ARR (from_struct ), ZSTR_KNOWN (ZEND_STR_FRAGMENT ), & dummy );
842+ zend_hash_str_add (Z_ARR_P (return_value ), "struct" , strlen ("struct" ), & from_struct );
790843
844+ php_uri_struct_free (uri_struct );
791845 php_uri_free (uri );
792846}
793847
0 commit comments