X-Git-Url: https://mattmccutchen.net/rsync/rsync.git/blobdiff_plain/7b558d7f8be904010cf69c8e69b6a4a8f64f3f33..557a35f55bf4cb99f5cce1d966598e11c03318cc:/flist.c diff --git a/flist.c b/flist.c index fcfde840..b3c966ed 100644 --- a/flist.c +++ b/flist.c @@ -655,6 +655,9 @@ static struct file_struct *receive_file_entry(struct file_list *flist, if (flags & XMIT_TOP_DIR) { in_del_hier = 1; del_hier_name_len = file->dir.depth == 0 ? 0 : l1 + l2; + if (relative_paths && del_hier_name_len > 2 + && basename_len == 1+1 && *basename == '.') + del_hier_name_len -= 2; file->flags |= FLAG_TOP_DIR | FLAG_DEL_HERE; } else if (in_del_hier) { if (!relative_paths || !del_hier_name_len @@ -1117,7 +1120,9 @@ struct file_list *send_file_list(int f, int argc, char *argv[]) if (l == 2 && fname[0] == '.') { /* Turn "./" into just "." rather than "./." */ fname[1] = '\0'; - } else if (l < MAXPATHLEN) { + } else { + if (l + 1 >= MAXPATHLEN) + overflow("send_file_list"); fname[l++] = '.'; fname[l] = '\0'; }