Files over 4 Gig in size encountered an error resulting in an unsuccessful copy as per (upstream) Bug Request ID: 1110812. The assignment 'len = job->basis_len' sometimes overflows. Made changes so that assignment is done only when appropriate. rs_mdfour variables B and C were observed to overflow their 'int' definition. This has been changed to 'unsigned int', which is now consistent with like coding in the openssl package. --- librsync-0.9.7/mdfour.h 2004-02-08 00:17:57.000000000 +0100 +++ librsync-0.9.7/mdfour.h.lfs_overflow 2006-03-10 11:44:10.000000000 +0100 @@ -1,7 +1,7 @@ /*= -*- c-basic-offset: 4; indent-tabs-mode: nil; -*- * * librsync -- the library for network deltas - * $Id: mdfour.h,v 1.7 2003/10/17 16:15:21 abo Exp $ + * $Id: mdfour.h,v 1.8 2006/03/10 10:44:10 abo Exp $ * * Copyright (C) 2000, 2001 by Martin Pool * Copyright (C) 2002, 2003 by Donovan Baarda @@ -24,7 +24,7 @@ #include "types.h" struct rs_mdfour { - int A, B, C, D; + unsigned int A, B, C, D; #if HAVE_UINT64 uint64_t totalN; #else --- librsync-0.9.7/patch.c 2004-09-17 23:35:50.000000000 +0200 +++ librsync-0.9.7/patch.c.lfs_overflow 2006-03-10 11:44:10.000000000 +0100 @@ -1,7 +1,7 @@ /*= -*- c-basic-offset: 4; indent-tabs-mode: nil; -*- * * librsync -- the library for network deltas - * $Id: patch.c,v 1.30 2004/09/10 02:48:58 mbp Exp $ + * $Id: patch.c,v 1.31 2006/03/10 10:44:10 abo Exp $ * * Copyright (C) 2000, 2001 by Martin Pool * @@ -214,12 +214,9 @@ void *buf, *ptr; rs_buffers_t *buffs = job->stream; - len = job->basis_len; - /* copy only as much as will fit in the output buffer, so that we * don't have to block or store the input. */ - if (len > buffs->avail_out) - len = buffs->avail_out; + len = (buffs->avail_out < job->basis_len) ? buffs->avail_out : job->basis_len; if (!len) return RS_BLOCKED;