diff -urN librsync-0.9.7/mdfour.h librsync-0.9.7.new/mdfour.h --- librsync-0.9.7/mdfour.h 2004-02-08 00:17:57.000000000 +0100 +++ librsync-0.9.7.new/mdfour.h 2009-08-08 16:08:57.000000000 +0200 @@ -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 diff -urN librsync-0.9.7/patch.c librsync-0.9.7.new/patch.c --- librsync-0.9.7/patch.c 2004-09-17 23:35:50.000000000 +0200 +++ librsync-0.9.7.new/patch.c 2009-08-08 16:10:40.000000000 +0200 @@ -214,12 +214,12 @@ 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) + if (job->basis_len > buffs->avail_out) len = buffs->avail_out; + else + len = job->basis_len; if (!len) return RS_BLOCKED;