Matt McCutchen's Web Site
/
rsync
/
rsync.git
/ commitdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
| commitdiff |
tree
raw
|
patch
|
inline
| side by side (parent:
73f2fa8
)
Avoid a crash if pop_local_filters() has some pointer gaps.
author
Wayne Davison
<wayned@samba.org>
Sat, 4 Aug 2007 19:09:21 +0000
(19:09 +0000)
committer
Wayne Davison
<wayned@samba.org>
Sat, 4 Aug 2007 19:09:21 +0000
(19:09 +0000)
exclude.c
patch
|
blob
|
blame
|
history
diff --git
a/exclude.c
b/exclude.c
index
1a0be70
..
96469ab
100644
(file)
--- a/
exclude.c
+++ b/
exclude.c
@@
-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];
if (!dname) {
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);
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);
}
filt_array[cur_depth] = push_local_filters(dname, dlen);
}