Commit 7fa60281 authored by Wayne Davison's avatar Wayne Davison

Avoid a crash if pop_local_filters() has some pointer gaps.

parent 73f2fa81
...@@ -494,25 +494,29 @@ void pop_local_filters(void *mem) ...@@ -494,25 +494,29 @@ void pop_local_filters(void *mem)
void change_local_filter_dir(const char *dname, int dlen, int dir_depth) 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]; static void *filt_array[MAXPATHLEN/2+1];
if (!dname) { if (!dname) {
while (cur_depth >= min_depth) for ( ; cur_depth >= 0; cur_depth--) {
pop_local_filters(filt_array[cur_depth--]); if (filt_array[cur_depth]) {
min_depth = MAXPATHLEN; pop_local_filters(filt_array[cur_depth]);
cur_depth = -1; filt_array[cur_depth] = NULL;
}
}
return; return;
} }
assert(dir_depth < MAXPATHLEN/2+1); assert(dir_depth < MAXPATHLEN/2+1);
while (cur_depth >= dir_depth && cur_depth >= min_depth) for ( ; cur_depth >= dir_depth; cur_depth--) {
pop_local_filters(filt_array[cur_depth--]); if (filt_array[cur_depth]) {
cur_depth = dir_depth; pop_local_filters(filt_array[cur_depth]);
if (cur_depth < min_depth) filt_array[cur_depth] = NULL;
min_depth = cur_depth; }
}
cur_depth = dir_depth;
filt_array[cur_depth] = push_local_filters(dname, dlen); filt_array[cur_depth] = push_local_filters(dname, dlen);
} }
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment