X-Git-Url: https://mattmccutchen.net/rsync/rsync.git/blobdiff_plain/9decb4d2ef51599425f12a68dbeba2b4f3a2d908..8e41b68e8f975c02a5d9281be780ba5d1a385107:/rsync.c diff --git a/rsync.c b/rsync.c index fbe18c7c..4fcdea1d 100644 --- a/rsync.c +++ b/rsync.c @@ -6,8 +6,9 @@ * Copyright (C) 2003-2007 Wayne Davison * * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License version 3 as - * published by the Free Software Foundation. + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 3 of the License, or + * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of @@ -198,9 +199,8 @@ int read_ndx_and_attrs(int f_in, int *iflag_ptr, uchar *type_ptr, invalid_ndx: rprintf(FERROR, "Invalid file index: %d (%d - %d) with iflags %x [%s]\n", - ndx, first_flist->ndx_start + first_flist->ndx_start, - first_flist->prev->ndx_start + first_flist->ndx_start - + first_flist->prev->used - 1, iflags, who_am_i()); + ndx, first_flist->ndx_start - 1, first_flist->prev->ndx_end, + iflags, who_am_i()); exit_cleanup(RERR_PROTOCOL); } cur_flist = flist; @@ -220,7 +220,7 @@ int read_ndx_and_attrs(int f_in, int *iflag_ptr, uchar *type_ptr, if (iflags & ITEM_TRANSFER) { int i = ndx - cur_flist->ndx_start; - if (!S_ISREG(cur_flist->files[i]->mode)) { + if (i < 0 || !S_ISREG(cur_flist->files[i]->mode)) { rprintf(FERROR, "received request to transfer non-regular file: %d [%s]\n", ndx, who_am_i()); @@ -495,12 +495,12 @@ struct file_list *flist_for_ndx(int ndx) if (!flist && !(flist = first_flist)) return NULL; - while (ndx < flist->ndx_start) { + while (ndx < flist->ndx_start-1) { if (flist == first_flist) return NULL; flist = flist->prev; } - while (ndx >= flist->ndx_start + flist->used) { + while (ndx > flist->ndx_end) { if (!(flist = flist->next)) return NULL; }