mirror of
https://github.com/RsyncProject/rsync.git
synced 2026-10-20 21:04:15 -04:00
Avoid a crash if pop_local_filters() has some pointer gaps.
This commit is contained in:
1 parent
73f2fa8189
commit
7fa60281bf
1 file changed
+14
-10
@@ -494,25 +494,29 @@ void pop_local_filters(void *mem)
|
||||
|
||||
void change_local_filter_dir(const char *dname, int dlen, int dir_depth)
|
||||
{
|
||||
static int min_depth = MAXPATHLEN, cur_depth = -1;
|
||||
static int cur_depth = -1;
|
||||
static void *filt_array[MAXPATHLEN/2+1];
|
||||
|
||||
if (!dname) {
|
||||
while (cur_depth >= min_depth)
|
||||
pop_local_filters(filt_array[cur_depth--]);
|
||||
min_depth = MAXPATHLEN;
|
||||
cur_depth = -1;
|
||||
for ( ; cur_depth >= 0; cur_depth--) {
|
||||
if (filt_array[cur_depth]) {
|
||||
pop_local_filters(filt_array[cur_depth]);
|
||||
filt_array[cur_depth] = NULL;
|
||||
}
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
||||
assert(dir_depth < MAXPATHLEN/2+1);
|
||||
|
||||
while (cur_depth >= dir_depth && cur_depth >= min_depth)
|
||||
pop_local_filters(filt_array[cur_depth--]);
|
||||
cur_depth = dir_depth;
|
||||
if (cur_depth < min_depth)
|
||||
min_depth = cur_depth;
|
||||
for ( ; cur_depth >= dir_depth; cur_depth--) {
|
||||
if (filt_array[cur_depth]) {
|
||||
pop_local_filters(filt_array[cur_depth]);
|
||||
filt_array[cur_depth] = NULL;
|
||||
}
|
||||
}
|
||||
|
||||
cur_depth = dir_depth;
|
||||
filt_array[cur_depth] = push_local_filters(dname, dlen);
|
||||
}
|
||||
|
||||
|
||||
Reference in new issue
Block a user