38 lines
1.5 KiB
Diff
38 lines
1.5 KiB
Diff
|
diff -up vsftpd-2.2.0/ls.c.wildchar vsftpd-2.2.0/ls.c
|
||
|
--- vsftpd-2.2.0/ls.c.wildchar 2009-09-08 12:49:51.679476554 +0200
|
||
|
+++ vsftpd-2.2.0/ls.c 2009-09-08 12:52:53.778427990 +0200
|
||
|
@@ -303,24 +303,19 @@ vsf_filename_passes_filter(const struct
|
||
|
{
|
||
|
goto out;
|
||
|
}
|
||
|
- if (!must_match_at_current_pos)
|
||
|
+ if (!must_match_at_current_pos && last_token == 0)
|
||
|
{
|
||
|
- struct mystr scan_fwd = INIT_MYSTR;
|
||
|
+ struct mystr last_str = INIT_MYSTR;
|
||
|
+ str_mid_to_end(&name_remain_str, &last_str,
|
||
|
+ str_getlen(&name_remain_str) - str_getlen(&s_match_needed_str));
|
||
|
+ locate_result = str_locate_str(&last_str, &s_match_needed_str);
|
||
|
+ str_free(&last_str);
|
||
|
|
||
|
- str_mid_to_end(&name_remain_str, &scan_fwd,
|
||
|
- indexx + str_getlen(&s_match_needed_str));
|
||
|
- /* We're allowed to be greedy, test if it match further along
|
||
|
- * keep advancing indexx while we can still match.
|
||
|
- */
|
||
|
- while( (locate_result = str_locate_str(&scan_fwd, &s_match_needed_str)),
|
||
|
- locate_result.found )
|
||
|
+ if (locate_result.found)
|
||
|
{
|
||
|
- indexx += locate_result.index + str_getlen(&s_match_needed_str);
|
||
|
- str_mid_to_end(&scan_fwd, &temp_str,
|
||
|
- locate_result.index + str_getlen(&s_match_needed_str));
|
||
|
- str_copy(&scan_fwd, &temp_str);
|
||
|
+ ret = 1;
|
||
|
}
|
||
|
- str_free(&scan_fwd);
|
||
|
+ goto out;
|
||
|
}
|
||
|
/* Chop matched string out of remainder */
|
||
|
str_mid_to_end(&name_remain_str, &temp_str,
|