@@ -9,6 +9,7 @@ static char *do_askpass(const char *cmd, const char *prompt)
99	struct  child_process  pass ;
1010	const  char  * args [3 ];
1111	static  struct  strbuf  buffer  =  STRBUF_INIT ;
12+ 	int  err  =  0 ;
1213
1314	args [0 ] =  cmd ;
1415	args [1 ]	=  prompt ;
@@ -19,25 +20,30 @@ static char *do_askpass(const char *cmd, const char *prompt)
1920	pass .out  =  -1 ;
2021
2122	if  (start_command (& pass ))
22- 		exit ( 1 ) ;
23+ 		return   NULL ;
2324
24- 	strbuf_reset (& buffer );
2525	if  (strbuf_read (& buffer , pass .out , 20 ) <  0 )
26- 		die ( "failed to get '%s' from %s\n" ,  prompt ,  cmd ) ;
26+ 		err   =   1 ;
2727
2828	close (pass .out );
2929
3030	if  (finish_command (& pass ))
31- 		exit (1 );
31+ 		err  =  1 ;
32+ 
33+ 	if  (err ) {
34+ 		error ("unable to read askpass response from '%s'" , cmd );
35+ 		strbuf_release (& buffer );
36+ 		return  NULL ;
37+ 	}
3238
3339	strbuf_setlen (& buffer , strcspn (buffer .buf , "\r\n" ));
3440
35- 	return  buffer . buf ;
41+ 	return  strbuf_detach ( & buffer ,  NULL ) ;
3642}
3743
3844char  * git_prompt (const  char  * prompt , int  flags )
3945{
40- 	char  * r ;
46+ 	char  * r   =   NULL ;
4147
4248	if  (flags  &  PROMPT_ASKPASS ) {
4349		const  char  * askpass ;
@@ -48,12 +54,15 @@ char *git_prompt(const char *prompt, int flags)
4854		if  (!askpass )
4955			askpass  =  getenv ("SSH_ASKPASS" );
5056		if  (askpass  &&  * askpass )
51- 			return  do_askpass (askpass , prompt );
57+ 			r   =  do_askpass (askpass , prompt );
5258	}
5359
54- 	r  =  git_terminal_prompt (prompt , flags  &  PROMPT_ECHO );
5560	if  (!r )
56- 		die_errno ("could not read '%s'" , prompt );
61+ 		r  =  git_terminal_prompt (prompt , flags  &  PROMPT_ECHO );
62+ 	if  (!r ) {
63+ 		/* prompts already contain ": " at the end */ 
64+ 		die ("could not read %s%s" , prompt , strerror (errno ));
65+ 	}
5766	return  r ;
5867}
5968
0 commit comments