+diff -urN librsync-0.9.7/mdfour.h librsync-0.9.7dev/mdfour.h
+--- librsync-0.9.7/mdfour.h 2004-02-07 18:17:57.000000000 -0500
++++ librsync-0.9.7dev/mdfour.h 2006-03-06 03:21:46.000000000 -0500
+@@ -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.7dev/patch.c
+--- librsync-0.9.7/patch.c 2004-09-17 17:35:50.000000000 -0400
++++ librsync-0.9.7dev/patch.c 2006-03-06 03:21:06.000000000 -0500
+@@ -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;