aboutsummaryrefslogtreecommitdiffstats
path: root/exclude.c
diff options
context:
space:
mode:
authorWayne Davison <wayned@samba.org>2008-03-26 14:01:52 -0700
committerWayne Davison <wayned@samba.org>2008-03-26 14:01:52 -0700
commit9793bbb3646cbaa816d074dc925a4f4f7d40089f (patch)
treec39b7d1c0f6a19f61aaca3819235886bd409277b /exclude.c
parentf6f74b93efc1b37f6135650dc034d3403ef482b6 (diff)
downloadandroid_external_rsync-9793bbb3646cbaa816d074dc925a4f4f7d40089f.tar.gz
android_external_rsync-9793bbb3646cbaa816d074dc925a4f4f7d40089f.tar.bz2
android_external_rsync-9793bbb3646cbaa816d074dc925a4f4f7d40089f.zip
Improved a length check in parse_merge_name().
Diffstat (limited to 'exclude.c')
-rw-r--r--exclude.c7
1 files changed, 4 insertions, 3 deletions
diff --git a/exclude.c b/exclude.c
index 9db8f1af..085d2642 100644
--- a/exclude.c
+++ b/exclude.c
@@ -332,12 +332,13 @@ static char *parse_merge_name(const char *merge_file, unsigned int *len_ptr,
/* If the name isn't in buf yet, it's wasn't absolute. */
if (fn != buf) {
- if (dirbuf_len + fn_len >= MAXPATHLEN) {
+ int d_len = dirbuf_len - prefix_skip;
+ if (d_len + fn_len >= MAXPATHLEN) {
rprintf(FERROR, "merge-file name overflows: %s\n", fn);
return NULL;
}
- memcpy(buf, dirbuf + prefix_skip, dirbuf_len - prefix_skip);
- memcpy(buf + dirbuf_len - prefix_skip, fn, fn_len + 1);
+ memcpy(buf, dirbuf + prefix_skip, d_len);
+ memcpy(buf + d_len, fn, fn_len + 1);
fn_len = clean_fname(buf, CFN_COLLAPSE_DOT_DOT_DIRS);
}