30 lines
1.2 KiB
Diff
30 lines
1.2 KiB
Diff
diff -up vsftpd-2.0.5/ls.c.greedy vsftpd-2.0.5/ls.c
|
|
--- vsftpd-2.0.5/ls.c.greedy 2007-12-03 12:03:50.000000000 +0100
|
|
+++ vsftpd-2.0.5/ls.c 2007-12-03 12:12:05.000000000 +0100
|
|
@@ -303,6 +303,25 @@ vsf_filename_passes_filter(const struct
|
|
{
|
|
goto out;
|
|
}
|
|
+ if (!must_match_at_current_pos)
|
|
+ {
|
|
+ struct mystr scan_fwd = INIT_MYSTR;
|
|
+
|
|
+ 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 )
|
|
+ {
|
|
+ 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);
|
|
+ }
|
|
+ str_free(&scan_fwd);
|
|
+ }
|
|
/* Chop matched string out of remainder */
|
|
str_mid_to_end(&name_remain_str, &temp_str,
|
|
indexx + str_getlen(&s_match_needed_str));
|