• J
    diff: fix infinite loop with --color-moved --ignore-space-change · fa5ba2c1
    Jeff King 提交于
    The --color-moved code uses next_byte() to advance through
    the blob contents. When the user has asked to ignore
    whitespace changes, we try to collapse any whitespace change
    down to a single space.
    
    However, we enter the conditional block whenever we see the
    IGNORE_WHITESPACE_CHANGE flag, even if the next byte isn't
    whitespace.
    
    This means that the combination of "--color-moved and
    --ignore-space-change" was completely broken. Worse, because
    we return from next_byte() without having advanced our
    pointer, the function makes no forward progress in the
    buffer and loops infinitely.
    
    Fix this by entering the conditional only when we actually
    see whitespace. We can apply this also to the
    IGNORE_WHITESPACE change. That code path isn't buggy
    (because it falls through to returning the next
    non-whitespace byte), but it makes the logic more clear if
    we only bother to look at whitespace flags after seeing that
    the next byte is whitespace.
    Reported-by: NOrgad Shaneh <orgads@gmail.com>
    Signed-off-by: NJeff King <peff@peff.net>
    Signed-off-by: NJunio C Hamano <gitster@pobox.com>
    fa5ba2c1
t4015-diff-whitespace.sh 29.5 KB