@@ -498,7 +498,12 @@ PHP_METHOD(Uri_Rfc3986_Uri, getRawScheme)
498498 uri_read_component (INTERNAL_FUNCTION_PARAM_PASSTHRU , URI_PROPERTY_NAME_SCHEME , URI_COMPONENT_READ_RAW );
499499}
500500
501- static void read_uriparser_userinfo (INTERNAL_FUNCTION_PARAMETERS , uri_component_read_mode_t read_mode )
501+ PHP_METHOD (Uri_Rfc3986_Uri , withScheme )
502+ {
503+ uri_write_component_str_or_null (INTERNAL_FUNCTION_PARAM_PASSTHRU , URI_PROPERTY_NAME_SCHEME );
504+ }
505+
506+ static void rfc3986_userinfo_read (INTERNAL_FUNCTION_PARAMETERS , uri_component_read_mode_t read_mode )
502507{
503508 ZEND_PARSE_PARAMETERS_NONE ();
504509
@@ -513,12 +518,48 @@ static void read_uriparser_userinfo(INTERNAL_FUNCTION_PARAMETERS, uri_component_
513518
514519PHP_METHOD (Uri_Rfc3986_Uri , getUserInfo )
515520{
516- read_uriparser_userinfo (INTERNAL_FUNCTION_PARAM_PASSTHRU , URI_COMPONENT_READ_NORMALIZED_ASCII );
521+ rfc3986_userinfo_read (INTERNAL_FUNCTION_PARAM_PASSTHRU , URI_COMPONENT_READ_NORMALIZED_ASCII );
517522}
518523
519524PHP_METHOD (Uri_Rfc3986_Uri , getRawUserInfo )
520525{
521- read_uriparser_userinfo (INTERNAL_FUNCTION_PARAM_PASSTHRU , URI_COMPONENT_READ_RAW );
526+ rfc3986_userinfo_read (INTERNAL_FUNCTION_PARAM_PASSTHRU , URI_COMPONENT_READ_RAW );
527+ }
528+
529+ PHP_METHOD (Uri_Rfc3986_Uri , withUserInfo )
530+ {
531+ zend_string * value ;
532+
533+ ZEND_PARSE_PARAMETERS_START (1 , 1 )
534+ Z_PARAM_PATH_STR_OR_NULL (value )
535+ ZEND_PARSE_PARAMETERS_END ();
536+
537+ zval zv ;
538+ if (value == NULL ) {
539+ ZVAL_NULL (& zv );
540+ } else {
541+ ZVAL_STR (& zv , value );
542+ }
543+
544+ zend_object * old_object = Z_OBJ_P (ZEND_THIS );
545+ uri_internal_t * internal_uri = Z_URI_INTERNAL_P (ZEND_THIS );
546+ URI_ASSERT_INITIALIZATION (internal_uri );
547+
548+ zend_object * new_object = old_object -> handlers -> clone_obj (old_object );
549+ if (new_object == NULL ) {
550+ RETURN_THROWS ();
551+ }
552+
553+ /* Assign the object early. The engine will take care of destruction in
554+ * case of an exception being thrown. */
555+ RETVAL_OBJ (new_object );
556+
557+ uri_internal_t * new_internal_uri = uri_internal_from_obj (new_object );
558+ URI_ASSERT_INITIALIZATION (new_internal_uri );
559+
560+ if (UNEXPECTED (php_uri_parser_rfc3986_userinfo_write (new_internal_uri , & zv , NULL ) == FAILURE )) {
561+ RETURN_THROWS ();
562+ }
522563}
523564
524565PHP_METHOD (Uri_Rfc3986_Uri , getUsername )
@@ -551,11 +592,21 @@ PHP_METHOD(Uri_Rfc3986_Uri, getRawHost)
551592 uri_read_component (INTERNAL_FUNCTION_PARAM_PASSTHRU , URI_PROPERTY_NAME_HOST , URI_COMPONENT_READ_RAW );
552593}
553594
595+ PHP_METHOD (Uri_Rfc3986_Uri , withHost )
596+ {
597+ uri_write_component_str_or_null (INTERNAL_FUNCTION_PARAM_PASSTHRU , URI_PROPERTY_NAME_HOST );
598+ }
599+
554600PHP_METHOD (Uri_Rfc3986_Uri , getPort )
555601{
556602 uri_read_component (INTERNAL_FUNCTION_PARAM_PASSTHRU , URI_PROPERTY_NAME_PORT , URI_COMPONENT_READ_RAW );
557603}
558604
605+ PHP_METHOD (Uri_Rfc3986_Uri , withPort )
606+ {
607+ uri_write_component_long_or_null (INTERNAL_FUNCTION_PARAM_PASSTHRU , URI_PROPERTY_NAME_PORT );
608+ }
609+
559610PHP_METHOD (Uri_Rfc3986_Uri , getPath )
560611{
561612 uri_read_component (INTERNAL_FUNCTION_PARAM_PASSTHRU , URI_PROPERTY_NAME_PATH , URI_COMPONENT_READ_NORMALIZED_ASCII );
@@ -566,6 +617,11 @@ PHP_METHOD(Uri_Rfc3986_Uri, getRawPath)
566617 uri_read_component (INTERNAL_FUNCTION_PARAM_PASSTHRU , URI_PROPERTY_NAME_PATH , URI_COMPONENT_READ_RAW );
567618}
568619
620+ PHP_METHOD (Uri_Rfc3986_Uri , withPath )
621+ {
622+ uri_write_component_str (INTERNAL_FUNCTION_PARAM_PASSTHRU , URI_PROPERTY_NAME_PATH );
623+ }
624+
569625PHP_METHOD (Uri_Rfc3986_Uri , getQuery )
570626{
571627 uri_read_component (INTERNAL_FUNCTION_PARAM_PASSTHRU , URI_PROPERTY_NAME_QUERY , URI_COMPONENT_READ_NORMALIZED_ASCII );
@@ -576,6 +632,11 @@ PHP_METHOD(Uri_Rfc3986_Uri, getRawQuery)
576632 uri_read_component (INTERNAL_FUNCTION_PARAM_PASSTHRU , URI_PROPERTY_NAME_QUERY , URI_COMPONENT_READ_RAW );
577633}
578634
635+ PHP_METHOD (Uri_Rfc3986_Uri , withQuery )
636+ {
637+ uri_write_component_str_or_null (INTERNAL_FUNCTION_PARAM_PASSTHRU , URI_PROPERTY_NAME_QUERY );
638+ }
639+
579640PHP_METHOD (Uri_Rfc3986_Uri , getFragment )
580641{
581642 uri_read_component (INTERNAL_FUNCTION_PARAM_PASSTHRU , URI_PROPERTY_NAME_FRAGMENT , URI_COMPONENT_READ_NORMALIZED_ASCII );
@@ -586,6 +647,11 @@ PHP_METHOD(Uri_Rfc3986_Uri, getRawFragment)
586647 uri_read_component (INTERNAL_FUNCTION_PARAM_PASSTHRU , URI_PROPERTY_NAME_FRAGMENT , URI_COMPONENT_READ_RAW );
587648}
588649
650+ PHP_METHOD (Uri_Rfc3986_Uri , withFragment )
651+ {
652+ uri_write_component_str_or_null (INTERNAL_FUNCTION_PARAM_PASSTHRU , URI_PROPERTY_NAME_FRAGMENT );
653+ }
654+
589655static void throw_cannot_recompose_uri_to_string (zend_object * object )
590656{
591657 zend_throw_exception_ex (NULL , 0 , "Cannot recompose %s to a string" , ZSTR_VAL (object -> ce -> name ));
@@ -831,29 +897,9 @@ PHP_METHOD(Uri_WhatWg_Url, getUnicodeHost)
831897 uri_read_component (INTERNAL_FUNCTION_PARAM_PASSTHRU , URI_PROPERTY_NAME_HOST , URI_COMPONENT_READ_NORMALIZED_UNICODE );
832898}
833899
834- PHP_METHOD (Uri_WhatWg_Url , withHost )
835- {
836- uri_write_component_str_or_null (INTERNAL_FUNCTION_PARAM_PASSTHRU , URI_PROPERTY_NAME_HOST );
837- }
838-
839- PHP_METHOD (Uri_WhatWg_Url , withPort )
840- {
841- uri_write_component_long_or_null (INTERNAL_FUNCTION_PARAM_PASSTHRU , URI_PROPERTY_NAME_PORT );
842- }
843-
844- PHP_METHOD (Uri_WhatWg_Url , withPath )
900+ PHP_METHOD (Uri_WhatWg_Url , getFragment )
845901{
846- uri_write_component_str (INTERNAL_FUNCTION_PARAM_PASSTHRU , URI_PROPERTY_NAME_PATH );
847- }
848-
849- PHP_METHOD (Uri_WhatWg_Url , withQuery )
850- {
851- uri_write_component_str_or_null (INTERNAL_FUNCTION_PARAM_PASSTHRU , URI_PROPERTY_NAME_QUERY );
852- }
853-
854- PHP_METHOD (Uri_WhatWg_Url , withFragment )
855- {
856- uri_write_component_str_or_null (INTERNAL_FUNCTION_PARAM_PASSTHRU , URI_PROPERTY_NAME_FRAGMENT );
902+ uri_read_component (INTERNAL_FUNCTION_PARAM_PASSTHRU , URI_PROPERTY_NAME_FRAGMENT , URI_COMPONENT_READ_NORMALIZED_UNICODE );
857903}
858904
859905PHP_METHOD (Uri_WhatWg_Url , equals )
0 commit comments