summaryrefslogtreecommitdiff
path: root/builtin/reflog.c
diff options
context:
space:
mode:
authorJeff King <peff@peff.net>2015-02-27 01:42:27 (GMT)
committerJunio C Hamano <gitster@pobox.com>2015-02-27 21:41:29 (GMT)
commit4d6be03b95c3db21db1bb8fee01128c1b13f70e7 (patch)
tree0f7900c095a79b828c04f25577896f8163518d13 /builtin/reflog.c
parentf98c2f7e53062a59f67914337c0b45c82393e11f (diff)
downloadgit-4d6be03b95c3db21db1bb8fee01128c1b13f70e7.zip
git-4d6be03b95c3db21db1bb8fee01128c1b13f70e7.tar.gz
git-4d6be03b95c3db21db1bb8fee01128c1b13f70e7.tar.bz2
diffcore-rename: avoid processing duplicate destinations
The rename code cannot handle an input where we have duplicate destinations (i.e., more than one diff_filepair in the queue with the same string in its pair->two->path). We end up allocating only one slot in the rename_dst mapping. If we fill in the diff_filepair for that slot, when we re-queue the results, we may queue that filepair multiple times. When the diff is finally flushed, the filepair is processed and free()d multiple times, leading to heap corruption. This situation should only happen when a tree diff sees duplicates in one of the trees (see the added test for a detailed example). Rather than handle it, the sanest thing is just to turn off rename detection altogether for the diff. Signed-off-by: Jeff King <peff@peff.net> Signed-off-by: Junio C Hamano <gitster@pobox.com>
Diffstat (limited to 'builtin/reflog.c')
0 files changed, 0 insertions, 0 deletions