From: Junio C Hamano Date: Mon, 13 Mar 2017 06:21:35 +0000 (-0700) Subject: Merge branch 'vn/line-log-memcpy-size-fix' X-Git-Tag: v2.13.0-rc0~126 X-Git-Url: https://git.lorimer.id.au/gitweb.git/diff_plain/6c621015f2b5028b8743da0b13293cc99fb2be6b?ds=inline;hp=-c Merge branch 'vn/line-log-memcpy-size-fix' The command-line parsing of "git log -L" copied internal data structures using incorrect size on ILP32 systems. * vn/line-log-memcpy-size-fix: line-log: use COPY_ARRAY to fix mis-sized memcpy --- 6c621015f2b5028b8743da0b13293cc99fb2be6b diff --combined line-log.c index 9510296659,df83ede12f..a23b910471 --- a/line-log.c +++ b/line-log.c @@@ -43,9 -43,10 +43,10 @@@ void range_set_release(struct range_se static void range_set_copy(struct range_set *dst, struct range_set *src) { range_set_init(dst, src->nr); - memcpy(dst->ranges, src->ranges, src->nr*sizeof(struct range_set)); + COPY_ARRAY(dst->ranges, src->ranges, src->nr); dst->nr = src->nr; } + static void range_set_move(struct range_set *dst, struct range_set *src) { range_set_release(dst); @@@ -113,7 -114,7 +114,7 @@@ void sort_and_merge_range_set(struct ra int i; int o = 0; /* output cursor */ - qsort(rs->ranges, rs->nr, sizeof(struct range), range_cmp); + QSORT(rs->ranges, rs->nr, range_cmp); for (i = 0; i < rs->nr; i++) { if (rs->ranges[i].start == rs->ranges[i].end) @@@ -144,7 -145,7 +145,7 @@@ static void range_set_union(struct range_set *out, struct range_set *a, struct range_set *b) { - int i = 0, j = 0, o = 0; + int i = 0, j = 0; struct range *ra = a->ranges; struct range *rb = b->ranges; /* cannot make an alias of out->ranges: it may change during grow */ @@@ -167,15 -168,16 +168,15 @@@ new = &rb[j++]; if (new->start == new->end) ; /* empty range */ - else if (!o || out->ranges[o-1].end < new->start) { + else if (!out->nr || out->ranges[out->nr-1].end < new->start) { range_set_grow(out, 1); - out->ranges[o].start = new->start; - out->ranges[o].end = new->end; - o++; - } else if (out->ranges[o-1].end < new->end) { - out->ranges[o-1].end = new->end; + out->ranges[out->nr].start = new->start; + out->ranges[out->nr].end = new->end; + out->nr++; + } else if (out->ranges[out->nr-1].end < new->end) { + out->ranges[out->nr-1].end = new->end; } } - out->nr = o; } /*