diff options
author | Linus Torvalds <torvalds@linux-foundation.org> | 2007-12-17 22:12:03 -0800 |
---|---|---|
committer | Junio C Hamano <gitster@pobox.com> | 2007-12-18 01:10:24 -0800 |
commit | f2fdd10ab76feb0e141fc3f9cf4e5efd87f7fcdf (patch) | |
tree | 3a50b7992f03995b41eecde0341d817bb4c29041 | |
parent | Fix segfault in diff-delta.c when FLEX_ARRAY is 1 (diff) | |
download | tgif-f2fdd10ab76feb0e141fc3f9cf4e5efd87f7fcdf.tar.xz |
unpack-trees: FLEX_ARRAY fix
In unpack-trees.c (line 593), we do
..
if (same(old, merge)) {
*merge = *old;
} else {
..
and that "merge" is a cache_entry pointer. If we have a non-zero
FLEX_ARRAY size, it will cause us to copy the first few bytes of the
name too.
That is technically wrong even for FLEX_ARRAY being 1, but you'll never
notice, since the filenames should always be the same with the current
code. But if we do the same thing for a rename, we'd be screwed.
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
-rw-r--r-- | unpack-trees.c | 2 |
1 files changed, 1 insertions, 1 deletions
diff --git a/unpack-trees.c b/unpack-trees.c index e9eb795d64..aa2513ed79 100644 --- a/unpack-trees.c +++ b/unpack-trees.c @@ -590,7 +590,7 @@ static int merged_entry(struct cache_entry *merge, struct cache_entry *old, * a match. */ if (same(old, merge)) { - *merge = *old; + memcpy(merge, old, offsetof(struct cache_entry, name)); } else { verify_uptodate(old, o); invalidate_ce_path(old); |