From 40d38dc0be7b1b5ef6d0ea4445b67f370d3d0f20 Mon Sep 17 00:00:00 2001 From: Wayne Davison Date: Sat, 17 Apr 2004 17:55:45 +0000 Subject: [PATCH] In add_exclude_file(), if we're word-splitting, stop reading a "line" at any whitespace (so that we don't overflow the line buffer). --- exclude.c | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/exclude.c b/exclude.c index 3e6c4df9..d0653bec 100644 --- a/exclude.c +++ b/exclude.c @@ -27,6 +27,11 @@ #include "rsync.h" extern int verbose; +extern int eol_nulls; +extern int list_only; +extern int recurse; + +extern char curr_dir[]; struct exclude_list_struct exclude_list; struct exclude_list_struct local_exclude_list; @@ -125,7 +130,6 @@ static int check_one_exclude(char *name, struct exclude_struct *ex, } else if ((ex->match_flags & MATCHFLG_ABS_PATH) && *name != '/') { static char full_name[MAXPATHLEN]; - extern char curr_dir[]; int plus = curr_dir[1] == '\0'? 1 : 0; pathjoin(full_name, sizeof full_name, curr_dir+plus, name); name = full_name; @@ -311,7 +315,7 @@ void add_exclude_file(struct exclude_list_struct *listp, const char *fname, FILE *fp; char line[MAXPATHLEN]; char *eob = line + MAXPATHLEN - 1; - extern int eol_nulls; + int word_split = xflags & XFLG_WORD_SPLIT; if (!fname || !*fname) return; @@ -340,6 +344,8 @@ void add_exclude_file(struct exclude_list_struct *listp, const char *fname, continue; break; } + if (word_split && isspace(ch)) + break; if (eol_nulls? !ch : (ch == '\n' || ch == '\r')) break; if (s < eob) @@ -359,7 +365,6 @@ void add_exclude_file(struct exclude_list_struct *listp, const char *fname, void send_exclude_list(int f) { struct exclude_struct *ent; - extern int list_only, recurse; /* This is a complete hack - blame Rusty. * -- 2.34.1