@@ -387,6 +387,7 @@ static int url_parse_finalize(git_net_url *url, git_net_url_parser *parser)
387
387
port = GIT_STR_INIT , path = GIT_STR_INIT ,
388
388
query = GIT_STR_INIT , fragment = GIT_STR_INIT ;
389
389
const char * default_port ;
390
+ int port_specified = 0 ;
390
391
int error = 0 ;
391
392
392
393
if (parser -> scheme_len ) {
@@ -408,10 +409,13 @@ static int url_parse_finalize(git_net_url *url, git_net_url_parser *parser)
408
409
(error = git_str_decode_percent (& host , parser -> host , parser -> host_len )) < 0 )
409
410
goto done ;
410
411
411
- if (parser -> port_len )
412
+ if (parser -> port_len ) {
413
+ port_specified = 1 ;
412
414
error = git_str_put (& port , parser -> port , parser -> port_len );
413
- else if (parser -> scheme_len && (default_port = default_port_for_scheme (scheme .ptr )) != NULL )
415
+ } else if (parser -> scheme_len &&
416
+ (default_port = default_port_for_scheme (scheme .ptr )) != NULL ) {
414
417
error = git_str_puts (& port , default_port );
418
+ }
415
419
416
420
if (error < 0 )
417
421
goto done ;
@@ -440,6 +444,7 @@ static int url_parse_finalize(git_net_url *url, git_net_url_parser *parser)
440
444
url -> fragment = git_str_detach (& fragment );
441
445
url -> username = git_str_detach (& user );
442
446
url -> password = git_str_detach (& password );
447
+ url -> port_specified = port_specified ;
443
448
444
449
error = 0 ;
445
450
@@ -785,10 +790,12 @@ int git_net_url_parse_scp(git_net_url *url, const char *given)
785
790
GIT_ASSERT (host_len );
786
791
GIT_ERROR_CHECK_ALLOC (url -> host = git__strndup (host , host_len ));
787
792
788
- if (port_len )
793
+ if (port_len ) {
794
+ url -> port_specified = 1 ;
789
795
GIT_ERROR_CHECK_ALLOC (url -> port = git__strndup (port , port_len ));
790
- else
796
+ } else {
791
797
GIT_ERROR_CHECK_ALLOC (url -> port = git__strdup (default_port ));
798
+ }
792
799
793
800
GIT_ASSERT (path );
794
801
GIT_ERROR_CHECK_ALLOC (url -> path = git__strdup (path ));
0 commit comments