X-Git-Url: https://mattmccutchen.net/rsync/rsync.git/blobdiff_plain/aec6b9f86f75a562768aeb8d3848fd5da6a675c0..80264051d88a6d845fe6338372e036cdfc0e0414:/receiver.c diff --git a/receiver.c b/receiver.c index 8c91ea6f..10673ca8 100644 --- a/receiver.c +++ b/receiver.c @@ -40,6 +40,7 @@ extern int io_error; extern char *tmpdir; extern char *partial_dir; extern char *basis_dir[]; +extern int basis_dir_cnt; extern int make_backups; extern int do_progress; extern char *backup_dir; @@ -219,8 +220,8 @@ static int receive_data(int f_in, char *fname_r, int fd_r, OFF_T size_r, read_sum_head(f_in, &sum); if (fd_r >= 0 && size_r > 0) { - OFF_T map_size = MAX((OFF_T)sum.blength * 2, 16*1024); - mapbuf = map_file(fd_r, size_r, map_size, sum.blength); + int32 read_size = MAX(sum.blength * 2, 16*1024); + mapbuf = map_file(fd_r, size_r, read_size, sum.blength); if (verbose > 2) { rprintf(FINFO, "recv mapped %s of size %.0f\n", safe_fname(fname_r), (double)size_r); @@ -453,8 +454,13 @@ int recv_files(int f_in, struct file_list *flist, char *local_name, case FNAMECMP_BACKUP: fnamecmp = get_backup_name(fname); break; - case FNAMECMP_BASIS_DIR: default: + if (j >= basis_dir_cnt) { + rprintf(FERROR, + "invalid basis_dir index: %d.\n", + j); + exit_cleanup(RERR_PROTOCOL); + } pathjoin(fnamecmpbuf, sizeof fnamecmpbuf, basis_dir[j], fname); fnamecmp = fnamecmpbuf;