Skip to content
  • Jeff King's avatar
    diffcore-rename: avoid processing duplicate destinations · 4d6be03b
    Jeff King authored and Junio C Hamano's avatar Junio C Hamano committed
    
    
    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: default avatarJeff King <peff@peff.net>
    Signed-off-by: default avatarJunio C Hamano <gitster@pobox.com>
    4d6be03b