зеркало из https://github.com/microsoft/git.git
rev-list: handle %x00 NUL in user format
The code paths for showing commits in "git log" and "git rev-list --graph" correctly handle embedded NULs by looking only at the resulting strbuf's length, and never treating it as a C string. The code path for regular rev-list, however, used printf("%s"), which resulted in truncated output. This patch uses fwrite instead, like the --graph code path. Signed-off-by: Jeff King <peff@peff.net> Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:
Родитель
7c6eafa35a
Коммит
9130ac9fe1
|
@ -147,8 +147,10 @@ static void show_commit(struct commit *commit, void *data)
|
|||
}
|
||||
} else {
|
||||
if (revs->commit_format != CMIT_FMT_USERFORMAT ||
|
||||
buf.len)
|
||||
printf("%s%c", buf.buf, info->hdr_termination);
|
||||
buf.len) {
|
||||
fwrite(buf.buf, 1, buf.len, stdout);
|
||||
putchar(info->hdr_termination);
|
||||
}
|
||||
}
|
||||
strbuf_release(&buf);
|
||||
} else {
|
||||
|
|
|
@ -77,10 +77,6 @@ test_expect_success 'apply binary patch' \
|
|||
tree1=`git write-tree` &&
|
||||
test "$tree1" = "$tree0"'
|
||||
|
||||
nul_to_q() {
|
||||
perl -pe 'y/\000/Q/'
|
||||
}
|
||||
|
||||
test_expect_success 'diff --no-index with binary creation' '
|
||||
echo Q | q_to_nul >binary &&
|
||||
(: hide error code from diff, which just indicates differences
|
||||
|
|
|
@ -162,6 +162,14 @@ commit 131a310eb913d107dd3c09a65d1651175898735d
|
|||
commit 86c75cfd708a0e5868dc876ed5b8bb66c80b4873
|
||||
EOF
|
||||
|
||||
test_expect_success '%x00 shows NUL' '
|
||||
echo >expect commit f58db70b055c5718631e5c61528b28b12090cdea &&
|
||||
echo >>expect fooQbar &&
|
||||
git rev-list -1 --format=foo%x00bar HEAD >actual.nul &&
|
||||
nul_to_q <actual.nul >actual &&
|
||||
test_cmp expect actual
|
||||
'
|
||||
|
||||
test_expect_success '%ad respects --date=' '
|
||||
echo 2005-04-07 >expect.ad-short &&
|
||||
git log -1 --date=short --pretty=tformat:%ad >output.ad-short master &&
|
||||
|
|
|
@ -248,6 +248,10 @@ test_decode_color () {
|
|||
-e 's/.\[m/<RESET>/g'
|
||||
}
|
||||
|
||||
nul_to_q () {
|
||||
perl -pe 'y/\000/Q/'
|
||||
}
|
||||
|
||||
q_to_nul () {
|
||||
perl -pe 'y/Q/\000/'
|
||||
}
|
||||
|
|
Загрузка…
Ссылка в новой задаче