git-commit-vandalism/t/helper
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
..
.gitignore t/helper: ignore only executable files 2019-09-20 11:13:13 -07:00
test-chmtime.c
test-config.c t/helper: merge test-config into test-tool 2018-03-27 08:45:47 -07:00
test-ctype.c
test-date.c test_date.c: remove reference to GIT_TEST_DATE_NOW 2019-09-18 14:15:01 -07:00
test-delta.c
test-dir-iterator.c Merge branch 'mt/dir-iterator-updates' 2019-08-09 10:13:14 -07:00
test-drop-caches.c Sync with 2.17.3 2019-12-06 16:29:15 +01:00
test-dump-cache-tree.c
test-dump-fsmonitor.c cache.h: flip NO_THE_INDEX_COMPATIBILITY_MACROS switch 2019-01-24 11:55:06 -08:00
test-dump-split-index.c
test-dump-untracked-cache.c cache.h: flip NO_THE_INDEX_COMPATIBILITY_MACROS switch 2019-01-24 11:55:06 -08:00
test-example-decorate.c object: convert lookup_unknown_object() to use object_id 2019-06-20 10:06:19 -07:00
test-fake-ssh.c
test-genrandom.c
test-genzeros.c tests: teach the test-tool to generate NUL bytes and use it 2019-02-19 10:22:21 -08:00
test-hash-speed.c t/helper: add a test helper to compute hash speed 2018-11-14 16:54:52 +09:00
test-hash.c t: make the sha1 test-tool helper generic 2018-11-14 16:54:52 +09:00
test-hashmap.c hashmap_entry: remove first member requirement from docs 2019-10-07 10:20:12 +09:00
test-index-version.c
test-json-writer.c
test-lazy-init-name-hash.c OFFSETOF_VAR macro to simplify hashmap iterators 2019-10-07 10:20:11 +09:00
test-line-buffer.c
test-match-trees.c match-trees.c: remove the_repo from shift_tree*() 2019-06-27 12:45:17 -07:00
test-mergesort.c
test-mktemp.c
test-oidmap.c test-oidmap: remove 'add' subcommand 2019-07-01 10:26:28 -07:00
test-online-cpus.c
test-parse-options.c parse-options: don't emit "ambiguous option" for aliases 2019-05-07 12:23:22 +09:00
test-path-utils.c Sync with 2.20.2 2019-12-06 16:31:12 +01:00
test-pkt-line.c
test-prio-queue.c test-prio-queue: use xmalloc 2019-04-12 13:34:17 +09:00
test-progress.c test-progress: fix test failures on big-endian systems 2019-10-21 09:53:49 +09:00
test-reach.c test-reach: test get_reachable_subset 2018-11-03 00:12:06 +09:00
test-read-cache.c test-read-cache: drop namelen variable 2019-09-06 11:03:39 -07:00
test-read-graph.c commit-graph.c: remove path normalization, comparison 2020-02-04 11:36:51 -08:00
test-read-midx.c
test-ref-store.c Merge branch 'cc/test-ref-store-typofix' 2019-02-05 14:26:13 -08:00
test-regex.c
test-repository.c t/helper/test-repository: celebrate independence from the_repository 2018-12-28 10:06:33 -08:00
test-revision-walking.c
test-run-command.c Merge branch 'js/mingw-inherit-only-std-handles' 2019-12-10 13:11:42 -08:00
test-scrap-cache-tree.c
test-serve-v2.c Turn git serve into a test helper 2019-04-19 14:03:24 +09:00
test-sha1-array.c
test-sha1.c t: make the sha1 test-tool helper generic 2018-11-14 16:54:52 +09:00
test-sha1.sh
test-sha256.c Add a base implementation of SHA-256 support 2018-11-14 16:54:53 +09:00
test-sigchain.c style: the opening '{' of a function is in a separate line 2018-12-10 15:41:09 +09:00
test-strcmp-offset.c
test-string-list.c
test-submodule-config.c
test-submodule-nested-repo-config.c repository: repo_submodule_init to take a submodule struct 2018-12-05 11:42:32 +09:00
test-subprocess.c
test-svn-fe.c
test-tool.c test-tool: use 'read-graph' helper 2019-11-13 11:14:16 +09:00
test-tool.h test-tool: use 'read-graph' helper 2019-11-13 11:14:16 +09:00
test-trace2.c trace2: t/helper/test-trace2, t0210.sh, t0211.sh, t0212.sh 2019-02-22 15:28:22 -08:00
test-urlmatch-normalization.c
test-wildmatch.c
test-windows-named-pipe.c
test-write-cache.c
test-xml-encode.c tests: optionally write results as JUnit-style .xml 2019-01-29 09:26:46 -08:00