From 684b4e31132b2b8df6b4feddeb006239b989793c Mon Sep 17 00:00:00 2001 From: Andrew Tridgell Date: Tue, 30 Dec 1997 17:36:58 +0000 Subject: [PATCH] buffer overflow patches from mhpower@mit.edu (Matt Power) --- flist.c | 13 +++++++++++-- rsync.c | 5 +++++ 2 files changed, 16 insertions(+), 2 deletions(-) diff --git a/flist.c b/flist.c index ef1d098a..c59d9340 100644 --- a/flist.c +++ b/flist.c @@ -373,14 +373,23 @@ static void send_directory(int f,struct file_list *flist,char *dir) fname[MAXPATHLEN-1]=0; l = strlen(fname); if (fname[l-1] != '/') { + if (l == MAXPATHLEN-1) { + fprintf(FERROR,"skipping long-named directory %s\n",fname); + closedir(d); + return; + } strcat(fname,"/"); l++; } p = fname + strlen(fname); if (cvs_exclude) { - strcpy(p,".cvsignore"); - local_exclude_list = make_exclude_list(fname,NULL,0); + if (strlen(fname) + strlen(".cvsignore") <= MAXPATHLEN-1) { + strcpy(p,".cvsignore"); + local_exclude_list = make_exclude_list(fname,NULL,0); + } else { + fprintf(FERROR,"cannot cvs-exclude in long-named directory %s\n",fname); + } } for (di=readdir(d); di; di=readdir(d)) { diff --git a/rsync.c b/rsync.c index 21e416a6..6e7f936a 100644 --- a/rsync.c +++ b/rsync.c @@ -803,6 +803,11 @@ off_t send_files(struct file_list *flist,int f_out,int f_in) if (file->dir) { strncpy(fname,file->dir,MAXPATHLEN-1); fname[MAXPATHLEN-1] = 0; + if (strlen(fname) == MAXPATHLEN-1) { + fprintf(FERROR, "send_files failed on long-named directory %s\n", + fname); + return -1; + } strcat(fname,"/"); } strncat(fname,file->name,MAXPATHLEN-strlen(fname)); -- 2.34.1