@@ -104,7 +104,8 @@ static int url_parse_authority(
104
104
const char * * password_start , size_t * password_len ,
105
105
const char * * host_start , size_t * host_len ,
106
106
const char * * port_start , size_t * port_len ,
107
- const char * authority_start , size_t len )
107
+ const char * authority_start , size_t len ,
108
+ const char * scheme_start , size_t scheme_len )
108
109
{
109
110
const char * c , * hostport_end , * host_end = NULL ,
110
111
* userpass_end , * user_end = NULL ;
@@ -194,6 +195,10 @@ static int url_parse_authority(
194
195
return url_invalid ("malformed hostname" );
195
196
196
197
case USERPASS :
198
+ if (* c == '@' &&
199
+ strncasecmp (scheme_start , "ssh" , scheme_len ))
200
+ return url_invalid ("malformed hostname" );
201
+
197
202
if (* c == ':' ) {
198
203
* password_start = c + 1 ;
199
204
* password_len = userpass_end - * password_start ;
@@ -307,7 +312,8 @@ int git_net_url_parse(git_net_url *url, const char *given)
307
312
& password_start ,& password_len ,
308
313
& host_start , & host_len ,
309
314
& port_start , & port_len ,
310
- authority_start , (c - authority_start ))) < 0 )
315
+ authority_start , (c - authority_start ),
316
+ scheme_start , scheme_len )) < 0 )
311
317
goto done ;
312
318
313
319
/* fall through */
@@ -365,7 +371,8 @@ int git_net_url_parse(git_net_url *url, const char *given)
365
371
& password_start ,& password_len ,
366
372
& host_start , & host_len ,
367
373
& port_start , & port_len ,
368
- authority_start , (c - authority_start ))) < 0 )
374
+ authority_start , (c - authority_start ),
375
+ scheme_start , scheme_len )) < 0 )
369
376
goto done ;
370
377
break ;
371
378
case PATH_START :
0 commit comments