1
0
mirror of https://github.com/git/git.git synced 2024-10-21 01:08:11 +02:00
git/builtin
Jeff King b897bf5f37 fast-export: use xmemdupz() for anonymizing oids
Our anonymize_mem() function is careful to take a ptr/len pair to allow
storing binary tokens like object ids, as well as partial strings (e.g.,
just "foo" of "foo/bar"). But it duplicates the hash key using
xstrdup()! That means that:

  - for a partial string, we'd store all bytes up to the NUL, even
    though we'd never look at anything past "len". This didn't produce
    wrong behavior, but was wasteful.

  - for a binary oid that doesn't contain a zero byte, we'd copy garbage
    bytes off the end of the array (though as long as nothing complained
    about reading uninitialized bytes, further reads would be limited by
    "len", and we'd produce the correct results)

  - for a binary oid that does contain a zero byte, we'd copy _fewer_
    bytes than intended into the hashmap struct. When we later try to
    look up a value, we'd access uninitialized memory and potentially
    falsely claim that a particular oid is not present.

The most common reason to store an oid is an anonymized gitlink, but our
test case doesn't have any gitlinks at all. So let's add one whose oid
contains a NUL and is present at two different paths. ASan catches the
memory error, but even without it we can detect the bug because the oid
is not anonymized the same way for both paths.

And of course the fix is to copy the correct number of bytes. We don't
technically need the appended NUL from xmemdupz(), but it doesn't hurt
as an extra protection against anybody treating it like a string (plus a
future patch will push us more in that direction).

Signed-off-by: Jeff King <peff@peff.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
2020-06-23 19:56:26 -07:00
..
add.c Use OPT_CALLBACK and OPT_CALLBACK_F 2020-04-28 10:47:10 -07:00
am.c auto-gc: pass --quiet down from am, commit, merge and rebase 2020-05-07 12:24:35 -07:00
annotate.c
apply.c
archive.c
bisect--helper.c Merge branch 'cb/bisect-helper-parser-fix' 2020-06-08 18:06:32 -07:00
blame.c Merge branch 'dl/opt-callback-cleanup' 2020-05-05 14:54:27 -07:00
branch.c Merge branch 'jk/for-each-ref-multi-key-sort-fix' 2020-05-08 14:25:04 -07:00
bundle.c
cat-file.c Use OPT_CALLBACK and OPT_CALLBACK_F 2020-04-28 10:47:10 -07:00
check-attr.c
check-ignore.c check-ignore: fix documentation and implementation to match 2020-02-18 15:28:58 -08:00
check-mailmap.c
check-ref-format.c
checkout-index.c Use OPT_CALLBACK and OPT_CALLBACK_F 2020-04-28 10:47:10 -07:00
checkout.c Merge branch 'bc/filter-process' 2020-06-08 18:06:30 -07:00
clean.c Merge branch 'dl/opt-callback-cleanup' 2020-05-05 14:54:27 -07:00
clone.c Merge branch 'js/reflog-anonymize-for-clone-and-fetch' 2020-06-17 21:54:01 -07:00
column.c
commit-graph.c commit-graph: drop COMMIT_GRAPH_WRITE_CHECK_OIDS flag 2020-05-18 12:51:11 -07:00
commit-tree.c Use OPT_CALLBACK and OPT_CALLBACK_F 2020-04-28 10:47:10 -07:00
commit.c Merge branch 'jc/auto-gc-quiet' 2020-05-13 12:19:19 -07:00
config.c config: add '--show-scope' to print the scope of a config value 2020-02-10 10:49:12 -08:00
count-objects.c
credential.c
describe.c Merge branch 'jc/describe-misnamed-annotated-tag' 2020-03-26 17:11:21 -07:00
diff-files.c
diff-index.c
diff-tree.c diff-tree.c: load notes machinery when required 2020-04-20 18:22:54 -07:00
diff.c oid_array: rename source file from sha1-array 2020-03-30 10:59:08 -07:00
difftool.c
env--helper.c
fast-export.c fast-export: use xmemdupz() for anonymizing oids 2020-06-23 19:56:26 -07:00
fetch-pack.c stateless-connect: send response end packet 2020-05-24 16:26:00 -07:00
fetch.c Merge branch 'js/reflog-anonymize-for-clone-and-fetch' 2020-06-17 21:54:01 -07:00
fmt-merge-msg.c Lib-ify fmt-merge-msg 2020-03-24 15:04:43 -07:00
for-each-ref.c Merge branch 'jk/for-each-ref-multi-key-sort-fix' 2020-05-08 14:25:04 -07:00
fsck.c Merge branch 'ds/multi-pack-verify' 2020-05-24 19:39:39 -07:00
gc.c
get-tar-commit-id.c
grep.c Merge branch 'dl/opt-callback-cleanup' 2020-05-05 14:54:27 -07:00
hash-object.c
help.c Merge branch 'es/bugreport' 2020-05-01 13:39:59 -07:00
index-pack.c promisor-remote: accept 0 as oid_nr in function 2020-04-02 12:42:32 -07:00
init-db.c Merge branch 'bc/sha-256-part-1-of-4' 2020-03-26 17:11:20 -07:00
interpret-trailers.c Use OPT_CALLBACK and OPT_CALLBACK_F 2020-04-28 10:47:10 -07:00
log.c Merge branch 'dl/opt-callback-cleanup' 2020-05-05 14:54:27 -07:00
ls-files.c Merge branch 'dl/opt-callback-cleanup' 2020-05-05 14:54:27 -07:00
ls-remote.c
ls-tree.c
mailinfo.c
mailsplit.c
merge-base.c rebase: --fork-point regression fix 2020-02-11 09:59:39 -08:00
merge-file.c
merge-index.c
merge-ours.c
merge-recursive.c
merge-tree.c
merge.c Merge branch 'an/merge-single-strategy-optim' 2020-06-02 13:35:01 -07:00
mktag.c
mktree.c
multi-pack-index.c
mv.c
name-rev.c name-rev: sort tip names before applying 2020-02-05 10:36:33 -08:00
notes.c Use OPT_CALLBACK and OPT_CALLBACK_F 2020-04-28 10:47:10 -07:00
pack-objects.c Merge branch 'tb/shallow-cleanup' 2020-05-13 12:19:18 -07:00
pack-redundant.c
pack-refs.c
patch-id.c
prune-packed.c Lib-ify prune-packed 2020-03-24 15:04:44 -07:00
prune.c Merge branch 'tb/shallow-cleanup' 2020-05-13 12:19:18 -07:00
pull.c Merge branch 'dl/opt-callback-cleanup' 2020-05-05 14:54:27 -07:00
push.c Merge branch 'dl/push-recurse-submodules-fix' 2020-05-05 14:54:28 -07:00
range-diff.c
read-tree.c Use OPT_CALLBACK and OPT_CALLBACK_F 2020-04-28 10:47:10 -07:00
rebase.c Merge branch 'jc/auto-gc-quiet' 2020-05-13 12:19:19 -07:00
receive-pack.c Merge branch 'tb/shallow-cleanup' 2020-05-13 12:19:18 -07:00
reflog.c parse_config_key(): return subsection len as size_t 2020-04-10 14:44:29 -07:00
remote-ext.c
remote-fd.c
remote.c Use OPT_CALLBACK and OPT_CALLBACK_F 2020-04-28 10:47:10 -07:00
repack.c Merge branch 'tb/shallow-cleanup' 2020-05-13 12:19:18 -07:00
replace.c
rerere.c
reset.c Use OPT_CALLBACK and OPT_CALLBACK_F 2020-04-28 10:47:10 -07:00
rev-list.c rev-list --count: comment on the use of count_right++ 2020-02-18 13:21:46 -08:00
rev-parse.c Merge branch 'tb/shallow-cleanup' 2020-05-13 12:19:18 -07:00
revert.c
rm.c rm: support the --pathspec-from-file option 2020-02-19 10:56:49 -08:00
send-pack.c Use OPT_CALLBACK and OPT_CALLBACK_F 2020-04-28 10:47:10 -07:00
shortlog.c Use OPT_CALLBACK and OPT_CALLBACK_F 2020-04-28 10:47:10 -07:00
show-branch.c Use OPT_CALLBACK and OPT_CALLBACK_F 2020-04-28 10:47:10 -07:00
show-index.c
show-ref.c Use OPT_CALLBACK and OPT_CALLBACK_F 2020-04-28 10:47:10 -07:00
sparse-checkout.c sparse-checkout: avoid staging deletions of all files 2020-06-05 08:05:50 -07:00
stash.c Merge branch 'en/fill-directory-exponential' 2020-04-29 16:15:31 -07:00
stripspace.c
submodule--helper.c submodule: port subcommand 'set-url' from shell to C 2020-05-08 09:17:55 -07:00
symbolic-ref.c
tag.c Merge branch 'jk/for-each-ref-multi-key-sort-fix' 2020-05-08 14:25:04 -07:00
unpack-file.c
unpack-objects.c
update-index.c Use OPT_CALLBACK and OPT_CALLBACK_F 2020-04-28 10:47:10 -07:00
update-ref.c update-ref: implement interactive transaction handling 2020-04-02 11:09:49 -07:00
update-server-info.c
upload-archive.c
upload-pack.c
var.c
verify-commit.c
verify-pack.c
verify-tag.c
worktree.c Merge branch 'es/worktree-duplicate-paths' 2020-06-22 15:55:03 -07:00
write-tree.c