aboutsummaryrefslogtreecommitdiff
path: root/apply.c
diff options
context:
space:
mode:
authorRené Scharfe <l.s.r@web.de>2017-07-15 22:20:54 +0200
committerJunio C Hamano <gitster@pobox.com>2017-07-17 14:55:10 -0700
commit177366415b95fb72bc2c37d55a936ff101986285 (patch)
tree51a96546371b788e5e11e4e28dddcb60a372a079 /apply.c
parentf331ab9d4cb21942dcde6d879aaca6a1784e8cb6 (diff)
downloadgit-177366415b95fb72bc2c37d55a936ff101986285.tar.gz
git-177366415b95fb72bc2c37d55a936ff101986285.tar.xz
apply: use COPY_ARRAY and MOVE_ARRAY in update_image()
Simplify the code by using the helper macros COPY_ARRAY and MOVE_ARRAY, which also makes them more robust in the case we copy or move no lines, as they allow using NULL points in that case, while memcpy(3) and memmove(3) don't. Found with Clang's UBSan. Signed-off-by: Rene Scharfe <l.s.r@web.de> Signed-off-by: Junio C Hamano <gitster@pobox.com>
Diffstat (limited to 'apply.c')
-rw-r--r--apply.c11
1 files changed, 4 insertions, 7 deletions
diff --git a/apply.c b/apply.c
index f2d599141..40707ca50 100644
--- a/apply.c
+++ b/apply.c
@@ -2809,13 +2809,10 @@ static void update_image(struct apply_state *state,
img->line_allocated = img->line;
}
if (preimage_limit != postimage->nr)
- memmove(img->line + applied_pos + postimage->nr,
- img->line + applied_pos + preimage_limit,
- (img->nr - (applied_pos + preimage_limit)) *
- sizeof(*img->line));
- memcpy(img->line + applied_pos,
- postimage->line,
- postimage->nr * sizeof(*img->line));
+ MOVE_ARRAY(img->line + applied_pos + postimage->nr,
+ img->line + applied_pos + preimage_limit,
+ img->nr - (applied_pos + preimage_limit));
+ COPY_ARRAY(img->line + applied_pos, postimage->line, postimage->nr);
if (!state->allow_overlap)
for (i = 0; i < postimage->nr; i++)
img->line[applied_pos + i].flag |= LINE_PATCHED;