From: Jeff King <peff@peff.net> To: git@vger.kernel.org Cc: Yiyuan guo <yguoaz@gmail.com> Subject: [PATCH 5/5] pack-objects: clamp negative depth to 0 Date: Sat, 1 May 2021 10:04:34 -0400 [thread overview] Message-ID: <YI1f8jKReuE3LXVH@coredump.intra.peff.net> (raw) In-Reply-To: <YI1fbERSuS7Y3LKh@coredump.intra.peff.net> A negative delta depth makes no sense, and the code is not prepared to handle it. If passed "--depth=-1" on the command line, then this line from break_delta_chains(): cur->depth = (total_depth--) % (depth + 1); triggers a divide-by-zero. This is undefined behavior according to the C standard, but on POSIX systems results in SIGFPE killing the process. This is certainly one way to inform the use that the command was invalid, but it's a bit friendlier to just treat it as "don't allow any deltas", which we already do for --depth=0. Signed-off-by: Jeff King <peff@peff.net> --- builtin/pack-objects.c | 2 ++ t/t5316-pack-delta-depth.sh | 7 +++++++ 2 files changed, 9 insertions(+) diff --git a/builtin/pack-objects.c b/builtin/pack-objects.c index ea7a5b3ba5..da5e0700f9 100644 --- a/builtin/pack-objects.c +++ b/builtin/pack-objects.c @@ -3861,6 +3861,8 @@ int cmd_pack_objects(int argc, const char **argv, const char *prefix) if (pack_to_stdout != !base_name || argc) usage_with_options(pack_usage, pack_objects_options); + if (depth < 0) + depth = 0; if (depth >= (1 << OE_DEPTH_BITS)) { warning(_("delta chain depth %d is too deep, forcing %d"), depth, (1 << OE_DEPTH_BITS) - 1); diff --git a/t/t5316-pack-delta-depth.sh b/t/t5316-pack-delta-depth.sh index 3e84df4137..759169d074 100755 --- a/t/t5316-pack-delta-depth.sh +++ b/t/t5316-pack-delta-depth.sh @@ -102,4 +102,11 @@ test_expect_success '--depth=0 disables deltas' ' test_cmp expect actual ' +test_expect_success 'negative depth disables deltas' ' + pack=$(git pack-objects --all --depth=-1 </dev/null pack) && + echo 0 >expect && + max_chain pack-$pack.pack >actual && + test_cmp expect actual +' + test_done -- 2.31.1.875.g5dccece0aa
next prev parent reply other threads:[~2021-05-01 14:04 UTC|newest] Thread overview: 15+ messages / expand[flat|nested] mbox.gz Atom feed top 2021-05-01 14:02 [PATCH 0/5] pack-objects: better handling of negative options Jeff King 2021-05-01 14:02 ` [PATCH 1/5] t5300: modernize basic tests Jeff King 2021-05-03 5:27 ` Junio C Hamano 2021-05-03 14:53 ` Jeff King 2021-05-01 14:03 ` [PATCH 2/5] t5300: check that we produced expected number of deltas Jeff King 2021-05-01 14:03 ` [PATCH 3/5] pack-objects: clamp negative window size to 0 Jeff King 2021-05-03 12:10 ` Derrick Stolee 2021-05-03 14:55 ` Jeff King 2021-05-04 18:47 ` René Scharfe 2021-05-04 21:38 ` Jeff King 2021-05-05 11:53 ` Ævar Arnfjörð Bjarmason 2021-05-05 16:19 ` René Scharfe 2021-05-01 14:04 ` [PATCH 4/5] t5316: check behavior of pack-objects --depth=0 Jeff King 2021-05-01 14:04 ` Jeff King [this message] 2021-05-03 12:11 ` [PATCH 5/5] pack-objects: clamp negative depth to 0 Derrick Stolee
Reply instructions: You may reply publicly to this message via plain-text email using any one of the following methods: * Save the following mbox file, import it into your mail client, and reply-to-all from there: mbox Avoid top-posting and favor interleaved quoting: https://en.wikipedia.org/wiki/Posting_style#Interleaved_style List information: http://vger.kernel.org/majordomo-info.html * Reply using the --to, --cc, and --in-reply-to switches of git-send-email(1): git send-email \ --in-reply-to=YI1f8jKReuE3LXVH@coredump.intra.peff.net \ --to=peff@peff.net \ --cc=git@vger.kernel.org \ --cc=yguoaz@gmail.com \ --subject='Re: [PATCH 5/5] pack-objects: clamp negative depth to 0' \ /path/to/YOUR_REPLY https://kernel.org/pub/software/scm/git/docs/git-send-email.html * If your mail client supports setting the In-Reply-To header via mailto: links, try the mailto: link
Code repositories for project(s) associated with this inbox: https://80x24.org/mirrors/git.git This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox; as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).