[PATCH] Fix count-delta overcounting
authorJunio C Hamano <junkio@cox.net>
Sat, 28 May 2005 19:22:38 +0000 (12:22 -0700)
committerLinus Torvalds <torvalds@ppc970.osdl.org>
Sun, 29 May 2005 19:01:06 +0000 (12:01 -0700)
The count-delta routine sometimes overcounted the copied source
material which resulted in unsigned int wraparound.

Signed-off-by: Junio C Hamano <junkio@cox.net>
Signed-off-by: Linus Torvalds <torvalds@osdl.org>
count-delta.c

index 3bcc205..e10c832 100644 (file)
@@ -88,5 +88,8 @@ unsigned long count_delta(void *delta_buf, unsigned long delta_size)
        /* delete size is what was _not_ copied from source.
         * edit size is that and literal additions.
         */
        /* delete size is what was _not_ copied from source.
         * edit size is that and literal additions.
         */
+       if (src_size + added_literal < copied_from_source)
+               /* we ended up overcounting and underflowed */
+               return 0;
        return (src_size - copied_from_source) + added_literal;
 }
        return (src_size - copied_from_source) + added_literal;
 }