Details | Last modification | View Log | RSS feed
Rev | Author | Line No. | Line |
---|---|---|---|
115 | magnus | 1 | Author: Magnus Holmgren |
2 | Description: Avoid crashing when tab-completing an empty command line in lsftp |
||
3 | The problem was that lsftp_s_skip returns NULL if nothing but |
||
4 | separator characters are found, and that case wasn't handled. |
||
5 | |||
6 | --- a/src/sftp/rl.c |
||
7 | +++ b/src/sftp/rl.c |
||
8 | @@ -205,7 +205,7 @@ int char_quoted( char* text, int index ) |
||
9 | char** lsftp_rl_completion(char* text, int start, int end) |
||
10 | { |
||
11 | char** matches=NULL; |
||
12 | - int s; |
||
13 | + const char *s; |
||
14 | |||
15 | /* If this word is at the start of the line, then it is a command to |
||
16 | * complete. |
||
17 | @@ -213,9 +213,9 @@ char** lsftp_rl_completion(char* text, i |
||
18 | |||
19 | rl_completion_append_character = ' '; /* Trailing space after word */ |
||
20 | |||
21 | - s = lsftp_s_skip( rl_line_buffer, " \n\t\r" ) - rl_line_buffer; |
||
22 | + s = lsftp_s_skip( rl_line_buffer, " \n\t\r" ); |
||
23 | |||
24 | - if ( start == s ) /* The first word should be a command, even with spaces in front */ |
||
25 | + if ( !s || rl_line_buffer + start == s ) /* The first word should be a command, even with spaces in front */ |
||
26 | { |
||
27 | matches = RL_COMPLETION_MATCHES( |
||
28 | text, |
||
29 | @@ -231,7 +231,7 @@ char** lsftp_rl_completion(char* text, i |
||
30 | |||
31 | /* Get the first word from the line (the command) */ |
||
32 | |||
33 | - lsftp_s_strtok( rl_line_buffer+s," \n\t\r", &tmp ); |
||
34 | + lsftp_s_strtok( s," \n\t\r", &tmp ); |
||
35 | |||
36 | while( (cmdname = commands[i].name) ) |
||
37 | { |