[PATCH] Fixlets on top of Nico's clean-up.
From: Junio C Hamano <hidden>
Date: 2016-06-15 22:42:01
Subsystem:
the rest · Maintainer:
Linus Torvalds
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 <redacted> --- 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, ------------------------------------------------