From: <rsbecker@nexbridge.com>
To: "'Jeff King'" <peff@peff.net>
Cc: "'Junio C Hamano'" <gitster@pobox.com>,
"'Randall S. Becker'" <the.n.e.key@gmail.com>,
<git@vger.kernel.org>
Subject: RE: [PATCH v2 3/3] builtin/unpack-objects.c: change xwrite to write_in_full avoid truncation.
Date: Tue, 27 Feb 2024 16:05:53 -0500 [thread overview]
Message-ID: <03d701da69c0$c3430e80$49c92b80$@nexbridge.com> (raw)
In-Reply-To: <20240227192530.GD3784114@coredump.intra.peff.net>
On Tuesday, February 27, 2024 2:26 PM, Peff wrote:
>To: rsbecker@nexbridge.com
>Cc: 'Junio C Hamano' <gitster@pobox.com>; 'Randall S. Becker' <the.n.e.key@gmail.com>; git@vger.kernel.org
>Subject: Re: [PATCH v2 3/3] builtin/unpack-objects.c: change xwrite to write_in_full avoid truncation.
>
>On Tue, Feb 27, 2024 at 02:04:46PM -0500, rsbecker@nexbridge.com wrote:
>
>> >> diff --git a/builtin/unpack-objects.c b/builtin/unpack-objects.c
>> >> index e0a701f2b3..6935c4574e 100644
>> >> --- a/builtin/unpack-objects.c
>> >> +++ b/builtin/unpack-objects.c
>> >> @@ -680,7 +680,7 @@ int cmd_unpack_objects(int argc, const char
>> >> **argv, const char *prefix UNUSED)
>> >>
>> >> /* Write the last part of the buffer to stdout */
>> >> while (len) {
>> >> - int ret = xwrite(1, buffer + offset, len);
>> >> + int ret = write_in_full(1, buffer + offset, len);
>> >> if (ret <= 0)
>> >> break;
>> >> len -= ret;
>> [...]
>> I experimented with using write_in_full vs. keeping xwrite. With
>> xwrite in this loop, t7704.9 consistently fails as described in the
>> other thread. With write_in_full, the code works correctly. I assume
>> there are side-effects that are present. This change is critical to
>> having the code work on NonStop. Otherwise git seems to be at risk of
>> actually being seriously broken if unpack does not work correctly. I
>> am happy to have my series ignored as long as the problem is otherwise corrected.
>
>I'm somewhat skeptical that this code is to blame, as it should be run very rarely at all; it is just dumping any content in the pack stream
>after the end of the checksum to stdout. But in normal use by Git, there is no such content in the first place.
>
>If I do this:
>
>diff --git a/builtin/unpack-objects.c b/builtin/unpack-objects.c index e0a701f2b3..affe55035d 100644
>--- a/builtin/unpack-objects.c
>+++ b/builtin/unpack-objects.c
>@@ -680,11 +680,7 @@ int cmd_unpack_objects(int argc, const char **argv, const char *prefix UNUSED)
>
> /* Write the last part of the buffer to stdout */
> while (len) {
>- int ret = xwrite(1, buffer + offset, len);
>- if (ret <= 0)
>- break;
>- len -= ret;
>- offset += ret;
>+ BUG("cruft at the end of the pack!");
> }
>
> /* All done */
>
>then t7704 still passes, as it does not run this code at all. In fact, nothing in the test suite fails. Which is not to say we should get rid of
>those code. If we were writing today we might flag it as an error, but we should keep it for historical compatibility.
>
>But I do not see any bug in the code, and nor do I think it could contribute to a test failure.
I have obviously gone down the wrong path trying to resolve this situation. Please consider this entire series dropped with my apologies for the time-waste.
Unfortunately, I do not have sufficient knowledge of the code to resolve the originally reported problem without further assistance to determine the root case (assuming it still is a problem). Changes in master post-2.44.0 appear to have contributed to resolving the situation, so I am now getting random pass/fail on the test. I'm going to hold 2.44.0 on ia64 and wait for a subsequent release at retest at that time.
Sadly,
--Randall
next prev parent reply other threads:[~2024-02-27 21:06 UTC|newest]
Thread overview: 12+ messages / expand[flat|nested] mbox.gz Atom feed top
2024-02-27 15:09 [PATCH v2 0/2] Change xwrite() to write_in_full() in builtins Randall S. Becker
2024-02-27 15:09 ` [PATCH v2 1/3] builtin/repack.c: change xwrite to write_in_full and report errors Randall S. Becker
2024-02-27 18:49 ` Junio C Hamano
2024-02-27 15:09 ` [PATCH v2 2/3] builtin/receive-pack.c: change xwrite to write_in_full Randall S. Becker
2024-02-27 19:00 ` Junio C Hamano
2024-02-27 15:09 ` [PATCH v2 3/3] builtin/unpack-objects.c: change xwrite to write_in_full avoid truncation Randall S. Becker
2024-02-27 18:58 ` Junio C Hamano
2024-02-27 19:04 ` rsbecker
2024-02-27 19:25 ` Jeff King
2024-02-27 21:05 ` rsbecker [this message]
2024-03-07 10:00 ` Jeff King
2024-02-27 21:11 ` [PATCH v2 0/2] Change xwrite() to write_in_full() in builtins rsbecker
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
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to='03d701da69c0$c3430e80$49c92b80$@nexbridge.com' \
--to=rsbecker@nexbridge.com \
--cc=git@vger.kernel.org \
--cc=gitster@pobox.com \
--cc=peff@peff.net \
--cc=the.n.e.key@gmail.com \
/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
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
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 NNTP newsgroup(s).