don't try to match checksums of two blocks which are of unequal
[rsync/rsync.git] / match.c
diff --git a/match.c b/match.c
index 38e8aa0..613eaec 100644 (file)
--- a/match.c
+++ b/match.c
@@ -178,7 +178,7 @@ static void hash_search(int f,struct sum_struct *s,
                for (; j<s->count && targets[j].t == t; j++) {
                        int i = targets[j].i;
                        
-                       if (sum != s->sums[i].sum1) continue;
+                       if (sum != s->sums[i].sum1 || s->sums[i].len > (len-offset)) continue;
                        
                        if (verbose > 3)
                                rprintf(FINFO,"potential match at %d target=%d %d sum=%08x\n",
@@ -199,7 +199,7 @@ static void hash_search(int f,struct sum_struct *s,
                        /* we've found a match, but now check to see
                            if last_i can hint at a better match */
                        for (j++; j<s->count && targets[j].t == t; j++) {
-                               int i2 = targets[j].t;
+                               int i2 = targets[j].i;
                                if (i2 == last_i + 1) {
                                        if (sum != s->sums[i2].sum1) break;
                                        if (memcmp(sum2,s->sums[i2].sum2,csum_length) != 0) break;