X-Git-Url: https://mattmccutchen.net/rsync/rsync.git/blobdiff_plain/e107b6b122812d88d531f3826e1a510abe916006..b6800a0b32d53cbb23129a3eea8fa832fb864b79:/rsync.c diff --git a/rsync.c b/rsync.c index ca122561..1654c30a 100644 --- a/rsync.c +++ b/rsync.c @@ -264,12 +264,13 @@ int read_ndx_and_attrs(int f_in, int *iflag_ptr, uchar *type_ptr, } if (!(flist = flist_for_ndx(ndx))) { + int start, used; invalid_ndx: + start = first_flist ? first_flist->ndx_start : 0; + used = first_flist ? first_flist->used : 0; rprintf(FERROR, "Invalid file index: %d (%d - %d) with iflags %x [%s]\n", - ndx, first_flist ? first_flist->ndx_start - 1 : -1, - first_flist ? first_flist->prev->ndx_end : -1, - iflags, who_am_i()); + ndx, start - 1, start + used -1, iflags, who_am_i()); exit_cleanup(RERR_PROTOCOL); } cur_flist = flist; @@ -380,10 +381,10 @@ int set_file_attrs(const char *fname, struct file_struct *file, stat_x *sxp, #endif #ifdef SUPPORT_XATTRS - if (preserve_xattrs && fnamecmp) - set_xattr(fname, file, fnamecmp, sxp); if (am_root < 0) set_stat_xattr(fname, file, new_mode); + if (preserve_xattrs && fnamecmp) + set_xattr(fname, file, fnamecmp, sxp); #endif if (!preserve_times || (S_ISDIR(sxp->st.st_mode) && preserve_times == 1)) @@ -572,7 +573,7 @@ struct file_list *flist_for_ndx(int ndx) return NULL; flist = flist->prev; } - while (ndx > flist->ndx_end) { + while (ndx >= flist->ndx_start + flist->used) { if (!(flist = flist->next)) return NULL; }