Files
git/builtin
Elijah Newren 902b90cf42 clean: fix theoretical path corruption
cmd_clean() had the following code structure:

    struct strbuf abs_path = STRBUF_INIT;
    for_each_string_list_item(item, &del_list) {
        strbuf_addstr(&abs_path, prefix);
        strbuf_addstr(&abs_path, item->string);
        PROCESS(&abs_path);
        strbuf_reset(&abs_path);
    }

where I've elided a bunch of unnecessary details and PROCESS(&abs_path)
represents a big chunk of code rather than an actual function call.  One
piece of PROCESS was:

    if (lstat(abs_path.buf, &st))
        continue;

which would cause the strbuf_reset() to be missed -- meaning that the
next path to be handled would have two paths concatenated.  This path
used to use die_errno() instead of continue prior to commit 396049e5fb
("git-clean: refactor git-clean into two phases", 2013-06-25), but my
understanding of how correct_untracked_entries() works is that it will
prevent both dir/ and dir/file from being in the list to clean so this
should be dead code and the die_errno() should be safe.  But I hesitate
to remove it since I am not certain.

However, we can fix both this bug and possible similar future bugs by
simply moving the strbuf_reset(&abs_path) to the beginning of the loop.
It'll result in N calls to strbuf_reset() instead of N-1, but that's a
small price to pay to avoid sneaky bugs like this.

Signed-off-by: Elijah Newren <newren@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
2019-09-17 12:20:36 -07:00
..
2019-04-25 16:41:14 +09:00
2019-09-17 12:20:36 -07:00
2019-01-29 12:47:54 -08:00
2019-04-25 16:41:12 +09:00
2019-05-19 16:45:35 +09:00
2018-10-19 13:34:02 +09:00
2019-03-20 15:16:06 +09:00
2019-02-06 22:05:23 -08:00
2019-02-06 22:05:23 -08:00
2019-01-18 13:49:52 -08:00
2019-03-24 21:35:34 +09:00
2019-05-09 00:37:25 +09:00
2019-05-19 16:45:26 +09:00
2019-06-19 08:19:21 -07:00