[PATCH] Fixlets on top of Nico's clean-up.
- From
Junio C Hamano <junkio@cox.net>
- Date
- Jun 29, 2005, 07:32 UTC
- Message-ID
- <7vpsu5ehz8.fsf@assigned-by-dhcp.cox.net>
- In-Reply-To
- <Pine.LNX.4.63.0506290246130.1667@localhost.localdomain>
Do we care about a corner case where delta_size is not smaller than 4 bytes, *datap passed to get_delta_hdr_size() points at some bytes before a mmaped page boundary, and all the bytes til the end of that page have high-bit set? The said inline function would step over the page boundary and would presumably segfault/sigbus.
Other than that, with the attached patch on top of it, I find your clean-up very pleasant to read. Please consider it acked.
------------ If we prefer 0 as maxsize for diff_delta() to say "unlimited", let's be consistent about it.
This patch also fixes type mismatch in a call to get_delta_hdr_size() from packed_delta_info().
Signed-off-by: Junio C Hamano <junkio@cox.net> ---
diffcore-break.c | 2 +- sha1_file.c | 11 ++++------- test-delta.c | 2 +- 3 files changed, 6 insertions(+), 9 deletions(-)
diff --git a/diffcore-break.c b/diffcore-break.c --- a/diffcore-break.c +++ b/diffcore-break.c @@ -65,7 +65,7 @@ static int should_break(struct diff_file delta = diff_delta(src->data, src->size, dst->data, dst->size, - &delta_size, ~0UL); + &delta_size, 0); /* Estimate the edit size by interpreting delta. */ if (count_delta(delta, delta_size, diff --git a/sha1_file.c b/sha1_file.c --- a/sha1_file.c +++ b/sha1_file.c @@ -598,9 +598,9 @@ static int packed_delta_info(unsigned ch char *type, unsigned long *sizep) { - unsigned char *data; + const unsigned char *data; unsigned char delta_head[64]; - unsigned long data_size, result_size, base_size, verify_base_size; + unsigned long result_size, base_size, verify_base_size; z_stream stream; int st; @@ -609,13 +609,10 @@ static int packed_delta_info(unsigned ch if (sha1_object_info(base_sha1, type, &base_size)) die("cannot get info for delta-pack base"); - data = base_sha1 + 20; - data_size = left - 20; - memset(&stream, 0, sizeof(stream)); - stream.next_in = data; - stream.avail_in = data_size; + data = stream.next_in = base_sha1 + 20; + stream.avail_in = left - 20; stream.next_out = delta_head; stream.avail_out = sizeof(delta_head); diff --git a/test-delta.c b/test-delta.c --- a/test-delta.c +++ b/test-delta.c @@ -61,7 +61,7 @@ int main(int argc, char *argv[]) if (argv[1][1] == 'd') out_buf = diff_delta(from_buf, from_size, data_buf, data_size, - &out_size, ~0UL); + &out_size, 0); else out_buf = patch_delta(from_buf, from_size, data_buf, data_size, ------------------------------------------------