diff options
author | Wayne Davison <wayned@samba.org> | 2008-03-26 14:01:52 -0700 |
---|---|---|
committer | Wayne Davison <wayned@samba.org> | 2008-03-26 14:01:52 -0700 |
commit | 9793bbb3646cbaa816d074dc925a4f4f7d40089f (patch) | |
tree | c39b7d1c0f6a19f61aaca3819235886bd409277b /exclude.c | |
parent | f6f74b93efc1b37f6135650dc034d3403ef482b6 (diff) | |
download | android_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.c | 7 |
1 files changed, 4 insertions, 3 deletions
@@ -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); } |