Files
git/builtin
Taylor Blau ad2dd5bb63 commit-graph.c: remove path normalization, comparison
As of the previous patch, all calls to 'commit-graph.c' functions which
perform path normalization (for e.g., 'get_commit_graph_filename()') are
of the form 'ctx->odb->path', which is always in normalized form.

Now that there are no callers passing non-normalized paths to these
functions, ensure that future callers are bound by the same restrictions
by making these functions take a 'struct object_directory *' instead of
a 'const char *'. To match, replace all calls with arguments of the form
'ctx->odb->path' with 'ctx->odb' To recover the path, functions that
perform path manipulation simply use 'odb->path'.

Further, avoid string comparisons with arguments of the form
'odb->path', and instead prefer raw pointer comparisons, which
accomplish the same effect, but are far less brittle.

This has a pleasant side-effect of making these functions much more
robust to paths that cannot be normalized by 'normalize_path_copy()',
i.e., because they are outside of the current working directory.

For example, prior to this patch, Valgrind reports that the following
uninitialized memory read [1]:

  $ ( cd t && GIT_DIR=../.git valgrind git rev-parse HEAD^ )

because 'normalize_path_copy()' can't normalize '../.git' (since it's
relative to but above of the current working directory) [2].

By using a 'struct object_directory *' directly,
'get_commit_graph_filename()' does not need to normalize, because all
paths are relative to the current working directory since they are
always read from the '->path' of an object directory.

[1]: https://lore.kernel.org/git/20191027042116.GA5801@sigill.intra.peff.net.
[2]: The bug here is that 'get_commit_graph_filename()' returns the
     result of 'normalize_path_copy()' without checking the return
     value.

Signed-off-by: Taylor Blau <me@ttaylorr.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
2020-02-04 11:36:51 -08:00
..
2019-12-25 11:22:01 -08:00
2019-10-15 13:47:59 +09:00
2019-11-11 11:46:29 +09:00
2019-09-18 11:50:09 -07:00
2019-12-25 11:21:58 -08:00
2019-01-29 12:47:54 -08:00
2019-10-15 13:48:02 +09:00
2019-04-25 16:41:12 +09:00
2019-10-15 13:48:02 +09:00
2019-09-30 13:19:32 +09:00
2019-10-07 11:32:53 +09:00
2019-05-13 14:22:54 +09:00
2019-08-19 13:05:58 -07:00
2019-11-10 18:02:14 +09:00
2019-10-11 14:24:46 +09:00
2019-12-10 13:11:41 -08:00
2019-10-11 14:24:48 +09:00
2019-12-01 09:04:37 -08:00
2019-06-19 08:19:21 -07:00