Avoid a non-writable-by-the-user file when copying xattrs.
[rsync/rsync.git] / generator.c
index 078b9d4..b12087f 100644 (file)
@@ -567,6 +567,12 @@ static void sum_sizes_sqroot(struct sum_struct *sum, int64 len)
        int s2length;
        int64 l;
 
+       if (len < 0) {
+               /* The file length overflowed our int64 var, so we can't process this file. */
+               sum->count = -1; /* indicate overflow error */
+               return;
+       }
+
        if (block_size)
                blength = block_size;
        else if (len <= BLOCK_SIZE * BLOCK_SIZE)
@@ -1354,10 +1360,11 @@ static void recv_generator(char *fname, struct file_struct *file, int ndx,
                const char *sl = F_SYMLINK(file);
                if (safe_symlinks && unsafe_symlink(sl, fname)) {
                        if (INFO_GTE(NAME, 1)) {
-                               if (solo_file)
+                               if (solo_file) {
                                        /* fname contains the destination path, but we
                                         * want to report the source path. */
                                        fname = f_name(file, NULL);
+                               }
                                rprintf(FINFO,
                                        "ignoring unsafe symlink \"%s\" -> \"%s\"\n",
                                        fname, sl);